60806040523480156200001157600080fd5b5060405162002a0438038062002a04833981016040819052620000349162000561565b6200003f3362000083565b845162000054906000906020880190620003eb565b5083516200006a906001906020870190620003eb565b5062000078838383620000c0565b5050505050620006a0565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a35b50565b7f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da166008054640100000000900463ffffffff16156200011057604051633ab534b960e21b815260040160405180910390fd5b6001600160a01b03821662000138576040516339a84a7b60e01b815260040160405180910390fd5b6200014382620002bc565b805463ffffffff60201b19166401000000001781556001810180546001600160a01b0384166001600160a01b03199091161790556001600160601b03841615620002b6576001600160a01b038316620001af57604051633a954ecd60e21b815260040160405180910390fd5b620001c0600163ffffffff6200062f565b620001dd670de0b6b3a76400006001600160601b0387166200060e565b1115620001fd57604051632cfb9d3360e11b815260040160405180910390fd5b8054600160601b600160c01b0319166c010000000000000000000000006001600160601b0386160217815560006200023584620002f4565b8054600160501b600160b01b0319166a01000000000000000000006001600160601b0388169081029190911782556040519081529091506001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3620002b484600162000385565b505b50505050565b630f4599e560005233602052602060006024601c6000855af160203d146001600051141616620000bd5763d125259c6000526004601cfd5b6001600160a01b03811660009081527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da166086020526040902080547f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da166009060ff166200037f57815460ff191660011782556200036b833b90565b156200037f57815461ff0019166101001782555b50919050565b806200039183620002f4565b80549115156101000261ff001990921691909117905560405181151581526001600160a01b038316907fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d64203939060200160405180910390a25050565b828054620003f99062000653565b90600052602060002090601f0160209004810192826200041d576000855562000468565b82601f106200043857805160ff191683800117855562000468565b8280016001018555821562000468579182015b82811115620004685782518255916020019190600101906200044b565b50620004769291506200047a565b5090565b5b808211156200047657600081556001016200047b565b80516001600160a01b0381168114620004a957600080fd5b919050565b600082601f830112620004bf578081fd5b81516001600160401b0380821115620004dc57620004dc6200068a565b604051601f8301601f19908116603f011681019082821181831017156200050757620005076200068a565b8160405283815260209250868385880101111562000523578485fd5b8491505b8382101562000546578582018301518183018401529082019062000527565b838211156200055757848385830101525b9695505050505050565b600080600080600060a0868803121562000579578081fd5b85516001600160401b038082111562000590578283fd5b6200059e89838a01620004ae565b96506020880151915080821115620005b4578283fd5b50620005c388828901620004ae565b604088015190955090506001600160601b0381168114620005e2578182fd5b9250620005f26060870162000491565b9150620006026080870162000491565b90509295509295909350565b6000826200062a57634e487b7160e01b81526012600452602481fd5b500490565b6000828210156200064e57634e487b7160e01b81526011600452602481fd5b500390565b600181811c908216806200066857607f821691505b602082108114156200037f57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61235480620006b06000396000f3fe6080604052600436106101845760003560e01c806355f804b3116100d6578063a9059cbb1161007f578063f04e283e11610059578063f04e283e146108f9578063f2fde38b1461090c578063fee81cf41461091f5761018b565b8063a9059cbb14610854578063c87b56dd14610874578063dd62ed3e146108945761018b565b80638a834744116100b05780638a834744146108065780638da5cb5b1461082657806395d89b411461083f5761018b565b806355f804b31461077457806370a0823114610794578063715018a6146107fe5761018b565b8063274e430b116101385780633ccfd60b116101125780633ccfd60b146107065780634ef41efc1461071b57806354d1f13d1461076c5761018b565b8063274e430b146106aa5780632a6a935d146106ca578063313ce567146106ea5761018b565b806318160ddd1161016957806318160ddd1461062457806323b872dd1461068057806325692962146106a05761018b565b806306fdde03146105c9578063095ea7b3146105f45761018b565b3661018b57005b7f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da1660060003560e01c63e985e9c58114156102485760018201546001600160a01b031633146101eb57604051630101292160e31b815260040160405180910390fd5b60443610156101f957600080fd5b6004356001600160a01b038181166000908152600385016020908152604080832060243594851684529091529020546102459060ff1661023a57600061023d565b60015b60ff16610952565b50505b80636352211e14156102ae5760018201546001600160a01b0316331461028157604051630101292160e31b815260040160405180910390fd5b602436101561028f57600080fd5b6004356102ac61029e8261095c565b6001600160a01b0316610952565b505b8063e5eb36c8141561031c5760018201546001600160a01b031633146102e757604051630101292160e31b815260040160405180910390fd5b60843610156102f557600080fd5b60043560243560443560643561030d84848484610a80565b6103176001610952565b505050505b8063813500fc14156103ce5760018201546001600160a01b0316331461035557604051630101292160e31b815260040160405180910390fd5b606436101561036357600080fd5b6001600160a01b0360443581811660009081527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da166036020908152604080832060043595861684529091529020805460ff19166024351515908117909155906103ca6001610952565b5050505b8063d10b6e0c14156104305760018201546001600160a01b0316331461040757604051630101292160e31b815260040160405180910390fd5b606436101561041557600080fd5b60043560243560443561042c61029e848484610f52565b5050505b8063081812fc14156104885760018201546001600160a01b0316331461046957604051630101292160e31b815260040160405180910390fd5b602436101561047757600080fd5b60043561048661029e82611075565b505b8063f5b100ea141561052b5760018201546001600160a01b031633146104c157604051630101292160e31b815260040160405180910390fd5b60243610156104cf57600080fd5b600435610529610524826001600160a01b031660009081527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da16608602052604090205463ffffffff66010000000000009091041690565b610952565b505b8063e2c7928114156105af5760018201546001600160a01b0316331461056457604051630101292160e31b815260040160405180910390fd5b600436101561057257600080fd5b7f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da16600546105af9068010000000000000000900463ffffffff16610952565b8063b7a94eb814156105c5576105c56001610952565b5050005b3480156105d557600080fd5b506105de61114d565b6040516105eb9190612223565b60405180910390f35b34801561060057600080fd5b5061061461060f366004612099565b6111df565b60405190151581526020016105eb565b34801561063057600080fd5b507f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da16600546c0100000000000000000000000090046bffffffffffffffffffffffff165b6040519081526020016105eb565b34801561068c57600080fd5b5061061461069b366004612035565b61126c565b6106a8611356565b005b3480156106b657600080fd5b506106146106c5366004611fe9565b6113a6565b3480156106d657600080fd5b506106a86106e53660046120c2565b6113ff565b3480156106f657600080fd5b50604051601281526020016105eb565b34801561071257600080fd5b506106a861140c565b34801561072757600080fd5b507f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da16601546001600160a01b03165b6040516001600160a01b0390911681526020016105eb565b6106a8611496565b34801561078057600080fd5b506106a861078f3660046120dc565b6114d2565b3480156107a057600080fd5b506106726107af366004611fe9565b6001600160a01b031660009081527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da166086020526040902054600160501b90046bffffffffffffffffffffffff1690565b6106a86114eb565b34801561081257600080fd5b506106a8610821366004612070565b6114ff565b34801561083257600080fd5b50638b78c6d81954610754565b34801561084b57600080fd5b506105de611515565b34801561086057600080fd5b5061061461086f366004612099565b611524565b34801561088057600080fd5b506105de61088f366004612149565b61153a565b3480156108a057600080fd5b506106726108af366004612003565b6001600160a01b0391821660009081527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da166056020908152604080832093909416825291909152205490565b6106a8610907366004611fe9565b611597565b6106a861091a366004611fe9565b6115d4565b34801561092b57600080fd5b5061067261093a366004611fe9565b63389a75e1600c908152600091909152602090205490565b8060005260206000f35b6001600160fd1b03600282901c1660009081527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da16607602090815260408083205460e0600686901b161c63ffffffff1683527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da166029091528120546001600160a01b03166109f95760405163677510db60e11b815260040160405180910390fd5b6001600160fd1b03600283901c1660009081527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da16607602090815260408083205460e0600687901b161c63ffffffff1683527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da166029091529020546001600160a01b03165b92915050565b7f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da166006001600160a01b038416610ac857604051633a954ecd60e21b815260040160405180910390fd5b6000816002016000610b00610add8760011b90565b600381901c600090815260078701602052604090205460059190911b60e0161c90565b63ffffffff1681526020810191909152604001600020546001600160a01b03908116915086168114610b5e576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b856001600160a01b0316836001600160a01b031614610bfb576001600160a01b03808716600090815260038401602090815260408083209387168352929052205460ff16610bfb5760008481526004830160205260409020546001600160a01b03848116911614610bfb576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c068761161e565b90506000610c138761161e565b8254909150670de0b6b3a7640000908390600a90610c47908490600160501b90046bffffffffffffffffffffffff16612256565b82546101009290920a6bffffffffffffffffffffffff818102199093169183160217909155825475ffffffffffffffffffffffff00000000000000000000198116670de0b6b3a7640000600160501b928390048416019092160217825550610cf1600187901b610cb7838a6116ac565b600787019190826020528160031c60005260406000206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b60008681526004850160209081526040808320805473ffffffffffffffffffffffffffffffffffffffff19169055845469ffffffff00000000000019811666010000000000009182900463ffffffff9081166000190181169283029190911787556001600160a01b038d16855260068901909352908320610d75929091906115fb16565b63ffffffff169050610ddb610daf600189811b01600381901c600090815260078901602052604090205460e060059290921b919091161c90565b6001600160a01b038b16600090815260068801602052604090209063ffffffff90811690849061176c16565b8154600163ffffffff660100000000000080840482169283019091160269ffffffff00000000000019909216919091178355610e6e610e1d83600190811b0190565b60018a811b01600381811c600090815260078b016020526040808220549285901c825290208054600594851b60e090811682811c9590961b169290921c9290921863ffffffff1690921b9091189055565b6001600160a01b03891660009081526006870160209081526040808320909152600383901c82529020805460e0600584901b1681811c8b1863ffffffff16901b189055610ef1600189811b0160078801602052600381901c600090815260409020805460e060059390931b9290921682811c851863ffffffff16901b9091189055565b5050866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a7640000604051610f4091815260200190565b60405180910390a35050505050505050565b60007f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da16600817f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da1660281610fa5600188901b610add565b63ffffffff1681526020810191909152604001600020546001600160a01b03908116915084168114611032576001600160a01b03808216600090815260038401602090815260408083209388168352929052205460ff16611032576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526004909201602052604090912080546001600160a01b03871673ffffffffffffffffffffffffffffffffffffffff1990911617905590509392505050565b6001600160fd1b03600282901c1660009081527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da16607602090815260408083205460e0600686901b161c63ffffffff1683527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da166029091528120546001600160a01b03166111125760405163677510db60e11b815260040160405180910390fd5b5060009081527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da1660460205260409020546001600160a01b031690565b60606000805461115c906122af565b80601f0160208091040260200160405190810160405280929190818152602001828054611188906122af565b80156111d55780601f106111aa576101008083540402835291602001916111d5565b820191906000526020600020905b8154815290600101906020018083116111b857829003601f168201915b5050505050905090565b6000807f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da1660033600081815260058301602090815260408083206001600160a01b038a16808552908352928190208890555187815293945090927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6001600160a01b03831660009081527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da16605602090815260408083203384529091528120547f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da1660090600019811461133f5780841115611314576040517f13be252b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03861660009081526005830160209081526040808320338452909152902084820390555b61134a8686866117a0565b50600195945050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6001600160a01b03811660009081527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da1660860205260408120805460ff166113ed57823b6113f8565b8054610100900460ff165b9392505050565b6114093382611dd3565b50565b611414611e37565b604051600090339047908381818185875af1925050503d8060008114611456576040519150601f19603f3d011682016040523d82523d6000602084013e61145b565b606091505b5050905080611409576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6114da611e37565b6114e660028383611f24565b505050565b6114f3611e37565b6114fd6000611e52565b565b611507611e37565b6115118282611dd3565b5050565b60606001805461115c906122af565b60006115313384846117a0565b50600192915050565b606060028054611549906122af565b151590506115665760405180602001604052806000815250610a7a565b600261157183611e90565b60405160200161158292919061217d565b60405160208183030381529060405292915050565b61159f611e37565b63389a75e1600c52806000526020600c2080544211156115c757636f5e88186000526004601cfd5b6000905561140981611e52565b6115dc611e37565b8060601b6115f257637448fbae6000526004601cfd5b61140981611e52565b600381901c600090815260209290925260409091205460059190911b60e0161c90565b6001600160a01b03811660009081527f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da166086020526040902080547f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da166009060ff166116a657815460ff19166001178255611693833b90565b156116a657815461ff0019166101001782555b50919050565b815462010000900463ffffffff167f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da166008161176557805481906000906116f69063ffffffff166122e4565b825463ffffffff8083166101009490940a84810291021990911617909255855462010000820265ffffffff0000199091161786556000908152600283016020526040902080546001600160a01b03861673ffffffffffffffffffffffffffffffffffffffff1990911617905591505b5092915050565b826020528160031c60005260406000206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b6001600160a01b0382166117c757604051633a954ecd60e21b815260040160405180910390fd5b7f61dd0d320a11019af7688ced18637b1235059a4e8141ed71cfccbe9f2da1660060006117f38561161e565b905060006118008561161e565b905061183b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b825463ffffffff6601000000000000808304821660808501528454041660a08301526bffffffffffffffffffffffff600160501b90910416604082018190528511156118b3576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040810180518690039081905283546bffffffffffffffffffffffff808316600160501b90810275ffffffffffffffffffffffff0000000000000000000019938416178755855481810483168a0160608701819052909216029116178355608082015161192e91670de0b6b3a7640000900480821191030290565b81528154610100900460ff1661197f57611979670de0b6b3a764000082606001518161196a57634e487b7160e01b600052601260045260246000fd5b048260a0015180821191030290565b60208201525b60006119c982602001518360000151016040805180820190915260608152600060208201526040805101828152806020018360051b81016040528183528083602001525050919050565b825190915015611b21576001600160a01b0388166000908152600686016020526040902060808301518351875463ffffffff680100000000000000008083048216849003909116026bffffffff00000000000000001990911617885581035b60001991909101600381901c60009081526020849052604081205491929160e0600585901b161c63ffffffff169050611a9c611a6782600190811b0190565b60078b01602052600381901c600090815260409020805460e060059390931b9290921682811c63ffffffff16901b9091189055565b611aa9611a678260011b90565b600081815260048a0160209081526040909120805473ffffffffffffffffffffffffffffffffffffffff19169055858101805160089390931b60608f901b1760011783529101905281811415611a285750855463ffffffff90911666010000000000000269ffffffff00000000000019909116178555505b602082015115611d5b576001600160a01b03871660009081526006860160209081526040822060a085015191850151909290820190611b60878c6116ac565b895460208801516bffffffff000000000000000019821663ffffffff6801000000000000000080850482169093018116909202178c55895469ffffffff0000000000001916660100000000000086831602178a55919250670de0b6b3a76400006c0100000000000000000000000082046bffffffffffffffffffffffff160491640100000000909104165b611c1b611bf88260011b90565b600381901c600090815260078e01602052604090205460059190911b60e0161c90565b63ffffffff1615611c3a5760010181811115611c35575060015b611beb565b6020869052600385901c600090815260409020805460e0600588901b1681811c841863ffffffff16901b189055611cab611c748260011b90565b60078d01602052600381901c600090815260409020805460e060059390931b9290921682811c871863ffffffff16901b9091189055565b611cf3600182811b01600187019660078e019190826020528160031c60005260406000206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b611d1d878e8360008360200151818360081b8560601b171781526020810185602001525050505050565b60010181811115611d2c575060015b83851415611beb578a5463ffffffff9091166401000000000267ffffffff0000000019909116178a5550505050505b80515115611d7c576001850154611d7c9082906001600160a01b0316611ede565b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611dc291815260200190565b60405180910390a350505050505050565b80611ddd8361161e565b80549115156101000261ff001990921691909117905560405181151581526001600160a01b038316907fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d64203939060200160405180910390a25050565b638b78c6d8195433146114fd576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a900480611ec657611ecb565b611eab565b5050819003601f19909101908152919050565b81516040810363263c69d68152602080820152815160051b60440191506020600083601c84016000875af1601f3d116001600051141616611f1e57600080fd5b50505050565b828054611f30906122af565b90600052602060002090601f016020900481019282611f525760008555611f98565b82601f10611f6b5782800160ff19823516178555611f98565b82800160010185558215611f98579182015b82811115611f98578235825591602001919060010190611f7d565b50611fa4929150611fa8565b5090565b5b80821115611fa45760008155600101611fa9565b80356001600160a01b0381168114611fd457600080fd5b919050565b80358015158114611fd457600080fd5b600060208284031215611ffa578081fd5b6113f882611fbd565b60008060408385031215612015578081fd5b61201e83611fbd565b915061202c60208401611fbd565b90509250929050565b600080600060608486031215612049578081fd5b61205284611fbd565b925061206060208501611fbd565b9150604084013590509250925092565b60008060408385031215612082578182fd5b61208b83611fbd565b915061202c60208401611fd9565b600080604083850312156120ab578182fd5b6120b483611fbd565b946020939093013593505050565b6000602082840312156120d3578081fd5b6113f882611fd9565b600080602083850312156120ee578182fd5b823567ffffffffffffffff80821115612105578384fd5b818501915085601f830112612118578384fd5b813581811115612126578485fd5b866020828501011115612137578485fd5b60209290920196919550909350505050565b60006020828403121561215a578081fd5b5035919050565b60008151612173818560208601612283565b9290920192915050565b600080845482600182811c91508083168061219957607f831692505b60208084108214156121b957634e487b7160e01b87526022600452602487fd5b8180156121cd57600181146121de5761220a565b60ff1986168952848901965061220a565b60008b815260209020885b868110156122025781548b8201529085019083016121e9565b505084890196505b50505050505061221a8185612161565b95945050505050565b6020815260008251806020840152612242816040850160208701612283565b601f01601f19169190910160400192915050565b60006bffffffffffffffffffffffff8381169083168181101561227b5761227b612308565b039392505050565b60005b8381101561229e578181015183820152602001612286565b83811115611f1e5750506000910152565b600181811c908216806122c357607f821691505b602082108114156116a657634e487b7160e01b600052602260045260246000fd5b600063ffffffff808316818114156122fe576122fe612308565b6001019392505050565b634e487b7160e01b600052601160045260246000fdfea264697066735822122099eae72e44c6d643a0cedf97dfc084c5fed4b6bc08b8ff1c13e00b067c7a398364736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000030695c23f77721ca87854ee362363a5056d3f24400000000000000000000000045f6899f87fadc2b5fdf52407949b6a33f1e31d000000000000000000000000000000000000000000000000000000000000000084d6f6e6b6565657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084d4f4e4b45454553000000000000000000000000000000000000000000000000