//
0x60806040526009805460ff1916600f17905534801561001c575f80fd5b505f80546001600160a01b031916331790556128928061003b5f395ff3fe608060405234801561000f575f80fd5b5060043610610187575f3560e01c80638eaed7bc116100d9578063b4ef11d711610093578063d3a7ae1c1161006e578063d3a7ae1c146103a1578063d4cd39c4146103b4578063ea5fe635146103c7578063fd83dccc146103da575f80fd5b8063b4ef11d714610368578063b4f821e71461037b578063caa44f7d1461038e575f80fd5b80638eaed7bc146102f65780639117874f146103095780639a8a42c61461031c578063a6f9dae11461032f578063af7a609814610342578063b25f357c14610355575f80fd5b8063667ae10c116101445780637fb3dcd61161011f5780637fb3dcd6146102ab57806383622dec146102be57806384856482146102d15780638da5cb5b146102e4575f80fd5b8063667ae10c146102515780636e4b8eb81461026457806377c2691514610279575f80fd5b8063038ef2661461018b5780630e8d872c146101be57806320349449146101de57806325027cd914610200578063325da673146102135780635899c4ee1461023e575b5f80fd5b61019e61019936600461204c565b6103ed565b6040516101b59b9a999897969594939291906120d3565b60405180910390f35b6101d16101cc36600461204c565b610792565b6040516101b59190612198565b6101f16101ec3660046121b1565b61089c565b6040516101b593929190612211565b6101d161020e36600461204c565b610ba2565b61022661022136600461204c565b610c20565b6040516001600160a01b0390911681526020016101b5565b6101d161024c366004612253565b610ca9565b61022661025f36600461204c565b610d6b565b61027761027236600461204c565b610dcc565b005b61029b6102873660046122b0565b60026020525f908152604090205460ff1681565b60405190151581526020016101b5565b6101d16102b93660046122c9565b610ed5565b61019e6102cc36600461204c565b610f2f565b6101d16102df366004612331565b610f66565b5f54610226906001600160a01b031681565b610277610304366004612348565b610f8d565b6102776103173660046123a3565b611077565b61027761032a3660046122b0565b6114d1565b61027761033d3660046122b0565b6115ad565b6101f16103503660046121b1565b611677565b6102776103633660046122b0565b6117bf565b6101d16103763660046122c9565b61188f565b61027761038936600461204c565b6118cf565b6101d161039c366004612253565b61198b565b6102776103af3660046123a3565b6119b5565b6101d16103c236600461204c565b611e3a565b6102776103d5366004612348565b611e9c565b6101d16103e836600461204c565b611f4d565b8051602081830181018051600382529282019190930120915280546001820180546001600160a01b0390921692916104249061249f565b80601f01602080910402602001604051908101604052809291908181526020018280546104509061249f565b801561049b5780601f106104725761010080835404028352916020019161049b565b820191905f5260205f20905b81548152906001019060200180831161047e57829003601f168201915b5050505050908060020180546104b09061249f565b80601f01602080910402602001604051908101604052809291908181526020018280546104dc9061249f565b80156105275780601f106104fe57610100808354040283529160200191610527565b820191905f5260205f20905b81548152906001019060200180831161050a57829003601f168201915b50505050509080600301805461053c9061249f565b80601f01602080910402602001604051908101604052809291908181526020018280546105689061249f565b80156105b35780601f1061058a576101008083540402835291602001916105b3565b820191905f5260205f20905b81548152906001019060200180831161059657829003601f168201915b505050506004830154600584018054939460ff8084169561010085046001600160a01b03169550600160a81b8504821694600160b01b900490911692906105f99061249f565b80601f01602080910402602001604051908101604052809291908181526020018280546106259061249f565b80156106705780601f1061064757610100808354040283529160200191610670565b820191905f5260205f20905b81548152906001019060200180831161065357829003601f168201915b5050505050908060060180546106859061249f565b80601f01602080910402602001604051908101604052809291908181526020018280546106b19061249f565b80156106fc5780601f106106d3576101008083540402835291602001916106fc565b820191905f5260205f20905b8154815290600101906020018083116106df57829003601f168201915b5050505050908060070180546107119061249f565b80601f016020809104026020016040519081016040528092919081815260200182805461073d9061249f565b80156107885780601f1061075f57610100808354040283529160200191610788565b820191905f5260205f20905b81548152906001019060200180831161076b57829003601f168201915b505050505090508b565b60605f6001600160a01b03166004836040516107ae91906124d7565b908152604051908190036020019020546001600160a01b0316036107ed5760405162461bcd60e51b81526004016107e4906124f2565b60405180910390fd5b6004826040516107fd91906124d7565b908152602001604051809103902060030180546108199061249f565b80601f01602080910402602001604051908101604052809291908181526020018280546108459061249f565b80156108905780601f1061086757610100808354040283529160200191610890565b820191905f5260205f20905b81548152906001019060200180831161087357829003601f168201915b50505050509050919050565b60608060605f60016006876040516108b491906124d7565b9081526020016040518091039020866040516108d091906124d7565b908152604051908190036020019020546108ea919061251b565b90505f6006876040516108fd91906124d7565b90815260200160405180910390208660405161091991906124d7565b9081526020016040518091039020828154811061093857610938612540565b905f5260205f200190505f6001600160a01b031660048260405161095c91906125c3565b908152604051908190036020019020546001600160a01b0316036109925760405162461bcd60e51b81526004016107e4906124f2565b6004816040516109a291906125c3565b90815260200160405180910390206001016004826040516109c391906125c3565b90815260200160405180910390206005016004836040516109e491906125c3565b9081526020016040518091039020600601828054610a019061249f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2d9061249f565b8015610a785780601f10610a4f57610100808354040283529160200191610a78565b820191905f5260205f20905b815481529060010190602001808311610a5b57829003601f168201915b50505050509250818054610a8b9061249f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab79061249f565b8015610b025780601f10610ad957610100808354040283529160200191610b02565b820191905f5260205f20905b815481529060010190602001808311610ae557829003601f168201915b50505050509150808054610b159061249f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b419061249f565b8015610b8c5780601f10610b6357610100808354040283529160200191610b8c565b820191905f5260205f20905b815481529060010190602001808311610b6f57829003601f168201915b5050505050905094509450945050509250925092565b60605f6001600160a01b0316600483604051610bbe91906124d7565b908152604051908190036020019020546001600160a01b031603610bf45760405162461bcd60e51b81526004016107e4906124f2565b600482604051610c0491906124d7565b908152602001604051809103902060050180546108199061249f565b5f806001600160a01b0316600483604051610c3b91906124d7565b908152604051908190036020019020546001600160a01b031603610c715760405162461bcd60e51b81526004016107e4906124f2565b600482604051610c8191906124d7565b908152604051908190036020019020600401546001600160a01b036101009091041692915050565b81516020818401810180516005825292820191850191909120919052805482908110610cd3575f80fd5b905f5260205f20015f91509150508054610cec9061249f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d189061249f565b8015610d635780601f10610d3a57610100808354040283529160200191610d63565b820191905f5260205f20905b815481529060010190602001808311610d4657829003601f168201915b505050505081565b5f806001600160a01b0316600383604051610d8691906124d7565b908152604051908190036020019020546001600160a01b031603610dbc5760405162461bcd60e51b81526004016107e4906124f2565b600382604051610c8191906124d7565b5f546001600160a01b0316331480610df25750335f9081526002602052604090205460ff165b610e0e5760405162461bcd60e51b81526004016107e4906125ce565b336001600160a01b0316600382604051610e2891906124d7565b908152604051908190036020019020546001600160a01b031614610e5e5760405162461bcd60e51b81526004016107e490612635565b6001600382604051610e7091906124d7565b9081526040519081900360200181206004018054921515600160a81b0260ff60a81b19909316929092179091557f0424c8d2bbdf02d859820b5cf70ab8477cf601cd57538e8c82c2a4f638b51b3c90610eca908390612198565b60405180910390a150565b8251602081850181018051600882529282018287012092905283518085018201805193815290820191850191909120919052805482908110610f15575f80fd5b905f5260205f20015f9250925050508054610cec9061249f565b8051602081830181018051600482529282019190930120915280546001820180546001600160a01b0390921692916104249061249f565b60018181548110610f75575f80fd5b905f5260205f20015f915090508054610cec9061249f565b5f6001600160a01b0316600483604051610fa791906124d7565b908152604051908190036020019020546001600160a01b031603610fdd5760405162461bcd60e51b81526004016107e4906124f2565b336001600160a01b0316600483604051610ff791906124d7565b908152604051908190036020019020546001600160a01b03161461102d5760405162461bcd60e51b81526004016107e49061267c565b8060048360405161103e91906124d7565b908152602001604051809103902060040160016101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b5f805b600154811015611122578660405160200161109591906124d7565b604051602081830303815290604052805190602001206003600183815481106110c0576110c0612540565b905f5260205f20016040516110d591906125c3565b90815260200160405180910390206002016040516020016110f691906125c3565b604051602081830303815290604052805190602001200361111a5760019150611122565b60010161107a565b508015155f036111685760078560405161113c91906124d7565b9081526040516020918190038201902080546001810182555f91825291902001611166878261270c565b505b5f5b60088660405161117a91906124d7565b90815260200160405180910390208760405161119691906124d7565b9081526040519081900360200190205481101561127257886040516020016111be91906124d7565b604051602081830303815290604052805190602001206008876040516111e491906124d7565b90815260200160405180910390208860405161120091906124d7565b9081526020016040518091039020828154811061121f5761121f612540565b905f5260205f200160405160200161123791906125c3565b604051602081830303815290604052805190602001200361126a5760405162461bcd60e51b81526004016107e4906127cc565b60010161116a565b5060088560405161128391906124d7565b90815260200160405180910390208660405161129f91906124d7565b9081526040516020918190038201902080546001810182555f918252919020016112c9898261270c565b50604080516101608101825233808252602082018b90529181018890526060810185905260ff8416608082015260a08101919091525f60c0820181905260e0820181905261010082018990526101208201869052610140820187905260018054808201825591527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60161135c8a8261270c565b508060038a60405161136e91906124d7565b90815260405160209181900382019020825181546001600160a01b0319166001600160a01b039091161781559082015160018201906113ad908261270c565b50604082015160028201906113c2908261270c565b50606082015160038201906113d7908261270c565b50608082015160048201805460a085015160c086015160e08701511515600160b01b0260ff60b01b19911515600160a81b029190911661ffff60a81b196001600160a01b039093166101009081026001600160a81b031990951660ff90971696909617939093179190911691909117179055820151600582019061145b908261270c565b506101208201516006820190611471908261270c565b506101408201516007820190611487908261270c565b509050507fee9a8e916f621a19477457c632dd38f0a28ccc5f691adb53f9c7fe32d37e552f8989896040516114be93929190612211565b60405180910390a1505050505050505050565b5f546001600160a01b031633146114fa5760405162461bcd60e51b81526004016107e49061280d565b6001600160a01b0381165f9081526002602052604090205460ff16156115625760405162461bcd60e51b815260206004820152601960248201527f57616c6c657420697320616c726561647920616c6c6f7765640000000000000060448201526064016107e4565b6001600160a01b0381165f81815260026020526040808220805460ff19166001179055517f5d99003d9c0cbe82ae9d9448fcfb13e529e587ad1b467eb05f304f7678a43e269190a250565b5f546001600160a01b031633146115d65760405162461bcd60e51b81526004016107e49061280d565b6001600160a01b03811661161e5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016107e4565b5f80546040516001600160a01b03808516939216917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b60608060605f600160088760405161168f91906124d7565b9081526020016040518091039020866040516116ab91906124d7565b908152604051908190036020019020546116c5919061251b565b90505f6008876040516116d891906124d7565b9081526020016040518091039020866040516116f491906124d7565b9081526020016040518091039020828154811061171357611713612540565b905f5260205f200190505f6001600160a01b031660038260405161173791906125c3565b908152604051908190036020019020546001600160a01b03160361176d5760405162461bcd60e51b81526004016107e4906124f2565b60038160405161177d91906125c3565b908152602001604051809103902060010160038260405161179e91906125c3565b90815260200160405180910390206005016003836040516109e491906125c3565b5f546001600160a01b031633146117e85760405162461bcd60e51b81526004016107e49061280d565b6001600160a01b0381165f9081526002602052604090205460ff166118475760405162461bcd60e51b815260206004820152601560248201527415d85b1b195d081a5cc81b9bdd08185b1b1bddd959605a1b60448201526064016107e4565b6001600160a01b0381165f81815260026020526040808220805460ff19169055517f6061821c30906da15d62f88beb63469e9dbb1e5958a1498b5a909e1c623121cb9190a250565b8251602081850181018051600682529282018287012092905283518085018201805193815290820191850191909120919052805482908110610f15575f80fd5b336001600160a01b03166003826040516118e991906124d7565b908152604051908190036020019020546001600160a01b03161461191f5760405162461bcd60e51b81526004016107e490612635565b600160038260405161193191906124d7565b9081526040519081900360200181206004018054921515600160b01b0260ff60b01b19909316929092179091557f0424c8d2bbdf02d859820b5cf70ab8477cf601cd57538e8c82c2a4f638b51b3c90610eca908390612198565b81516020818401810180516007825292820191850191909120919052805482908110610cd3575f80fd5b5f546001600160a01b03163314806119db5750335f9081526002602052604090205460ff165b6119f75760405162461bcd60e51b81526004016107e4906125ce565b5f805b600154811015611aa25786604051602001611a1591906124d7565b60405160208183030381529060405280519060200120600360018381548110611a4057611a40612540565b905f5260205f2001604051611a5591906125c3565b9081526020016040518091039020600201604051602001611a7691906125c3565b6040516020818303038152906040528051906020012003611a9a5760019150611aa2565b6001016119fa565b508015155f03611ae857600585604051611abc91906124d7565b9081526040516020918190038201902080546001810182555f91825291902001611ae6878261270c565b505b5f5b600686604051611afa91906124d7565b908152602001604051809103902087604051611b1691906124d7565b90815260405190819003602001902054811015611bf25788604051602001611b3e91906124d7565b60405160208183030381529060405280519060200120600687604051611b6491906124d7565b908152602001604051809103902088604051611b8091906124d7565b90815260200160405180910390208281548110611b9f57611b9f612540565b905f5260205f2001604051602001611bb791906125c3565b6040516020818303038152906040528051906020012003611bea5760405162461bcd60e51b81526004016107e4906127cc565b600101611aea565b50600685604051611c0391906124d7565b908152602001604051809103902086604051611c1f91906124d7565b9081526040516020918190038201902080546001810182555f91825291902001611c49898261270c565b50604080516101608101825233808252602082018b90529181018890526060810185905260ff8416608082015260a08101919091525f60c0820181905260e0820181905261010082018990526101208201869052610140820187905260018054808201825591527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601611cdc8a8261270c565b508060048a604051611cee91906124d7565b90815260405160209181900382019020825181546001600160a01b0319166001600160a01b03909116178155908201516001820190611d2d908261270c565b5060408201516002820190611d42908261270c565b5060608201516003820190611d57908261270c565b50608082015160048201805460a085015160c086015160e08701511515600160b01b0260ff60b01b19911515600160a81b029190911661ffff60a81b196001600160a01b039093166101009081026001600160a81b031990951660ff909716969096179390931791909116919091171790558201516005820190611ddb908261270c565b506101208201516006820190611df1908261270c565b506101408201516007820190611e07908261270c565b509050507f77d8d52be42272e5261c9e3e9cd5f254de45b9fca6876a2f305b77c930ef3bc0896040516114be9190612198565b60605f6001600160a01b0316600383604051611e5691906124d7565b908152604051908190036020019020546001600160a01b031603611e8c5760405162461bcd60e51b81526004016107e4906124f2565b6003826040516107fd91906124d7565b5f6001600160a01b0316600383604051611eb691906124d7565b908152604051908190036020019020546001600160a01b031603611eec5760405162461bcd60e51b81526004016107e4906124f2565b336001600160a01b0316600383604051611f0691906124d7565b908152604051908190036020019020546001600160a01b031614611f3c5760405162461bcd60e51b81526004016107e49061267c565b8060038360405161103e91906124d7565b60605f6001600160a01b0316600383604051611f6991906124d7565b908152604051908190036020019020546001600160a01b031603611f9f5760405162461bcd60e51b81526004016107e4906124f2565b600382604051610c0491906124d7565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611fd2575f80fd5b813567ffffffffffffffff80821115611fed57611fed611faf565b604051601f8301601f19908116603f0116810190828211818310171561201557612015611faf565b8160405283815286602085880101111561202d575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f6020828403121561205c575f80fd5b813567ffffffffffffffff811115612072575f80fd5b61207e84828501611fc3565b949350505050565b5f5b838110156120a0578181015183820152602001612088565b50505f910152565b5f81518084526120bf816020860160208601612086565b601f01601f19169290920160200192915050565b6001600160a01b038c168152610160602082018190525f906120f78382018e6120a8565b9050828103604084015261210b818d6120a8565b9050828103606084015261211f818c6120a8565b60ff8b16608085015290506001600160a01b03891660a084015287151560c084015286151560e084015282810361010084015261215c81876120a8565b905082810361012084015261217181866120a8565b905082810361014084015261218681856120a8565b9e9d5050505050505050505050505050565b602081525f6121aa60208301846120a8565b9392505050565b5f80604083850312156121c2575f80fd5b823567ffffffffffffffff808211156121d9575f80fd5b6121e586838701611fc3565b935060208501359150808211156121fa575f80fd5b5061220785828601611fc3565b9150509250929050565b606081525f61222360608301866120a8565b828103602084015261223581866120a8565b9050828103604084015261224981856120a8565b9695505050505050565b5f8060408385031215612264575f80fd5b823567ffffffffffffffff81111561227a575f80fd5b61228685828601611fc3565b95602094909401359450505050565b80356001600160a01b03811681146122ab575f80fd5b919050565b5f602082840312156122c0575f80fd5b6121aa82612295565b5f805f606084860312156122db575f80fd5b833567ffffffffffffffff808211156122f2575f80fd5b6122fe87838801611fc3565b94506020860135915080821115612313575f80fd5b5061232086828701611fc3565b925050604084013590509250925092565b5f60208284031215612341575f80fd5b5035919050565b5f8060408385031215612359575f80fd5b823567ffffffffffffffff81111561236f575f80fd5b61237b85828601611fc3565b92505061238a60208401612295565b90509250929050565b803560ff811681146122ab575f80fd5b5f805f805f805f60e0888a0312156123b9575f80fd5b873567ffffffffffffffff808211156123d0575f80fd5b6123dc8b838c01611fc3565b985060208a01359150808211156123f1575f80fd5b6123fd8b838c01611fc3565b975060408a0135915080821115612412575f80fd5b61241e8b838c01611fc3565b965060608a0135915080821115612433575f80fd5b61243f8b838c01611fc3565b955060808a0135915080821115612454575f80fd5b6124608b838c01611fc3565b945060a08a0135915080821115612475575f80fd5b506124828a828b01611fc3565b92505061249160c08901612393565b905092959891949750929550565b600181811c908216806124b357607f821691505b6020821081036124d157634e487b7160e01b5f52602260045260245ffd5b50919050565b5f82516124e8818460208701612086565b9190910192915050565b6020808252600f908201526e125b5859d9481b9bdd08199bdd5b99608a1b604082015260600190565b8181038181111561253a57634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b5f81546125608161249f565b60018281168015612578576001811461258d576125b9565b60ff19841687528215158302870194506125b9565b855f526020805f205f5b858110156125b05781548a820152908401908201612597565b50505082870194505b5050505092915050565b5f6121aa8284612554565b60208082526041908201527f4f6e6c792074686520636f6e7472616374206f776e6572206f7220616c6c6f7760408201527f65642077616c6c65742063616e2063616c6c20746869732066756e6374696f6e6060820152601760f91b608082015260a00190565b60208082526027908201527f4f6e6c7920696d616765206f776e65722063616e207075626c697368207468696040820152667320696d61676560c81b606082015260800190565b60208082526024908201527f4f6e6c79206f776e65722063616e206368616e676520726577617264206164646040820152637265737360e01b606082015260800190565b601f82111561270757805f5260205f20601f840160051c810160208510156126e55750805b601f840160051c820191505b81811015612704575f81556001016126f1565b50505b505050565b815167ffffffffffffffff81111561272657612726611faf565b61273a81612734845461249f565b846126c0565b602080601f83116001811461276d575f84156127565750858301515b5f19600386901b1c1916600185901b1785556127c4565b5f85815260208120601f198616915b8281101561279b5788860151825594840194600190910190840161277c565b50858210156127b857878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60208082526021908201527f496d616765206861736820697320616c726561647920696e20726567697374726040820152607960f81b606082015260800190565b6020808252602f908201527f4f6e6c792074686520636f6e7472616374206f776e65722063616e2063616c6c60408201526e103a3434b990333ab731ba34b7b71760891b60608201526080019056fea26469706673582212205f421b84465f1324a018f6adc975f6a187b93586364f264382e6377934bb745f64736f6c63430008170033