60806040523480156200001157600080fd5b5060405162002aac38038062002aac833981016040819052620000349162000179565b336040518060400160405280601681526020017f5472617368626f617264204e656f2d436c6173736963000000000000000000008152506040518060400160405280600b81526020016a27a12522a1aa24a32c919960a91b8152508282828160029081620000a39190620002df565b506003620000b28282620002df565b5050506001600160a01b038116620000e457604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000ef8162000111565b5050505080600f9081620001049190620002df565b50506001600e55620003ab565b600d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200018d57600080fd5b82516001600160401b0380821115620001a557600080fd5b818501915085601f830112620001ba57600080fd5b815181811115620001cf57620001cf62000163565b604051601f8201601f19908116603f01168101908382118183101715620001fa57620001fa62000163565b8160405282815288868487010111156200021357600080fd5b600093505b8284101562000237578484018601518185018701529285019262000218565b600086848301015280965050505050505092915050565b600181811c908216806200026357607f821691505b6020821081036200028457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002da576000816000526020600020601f850160051c81016020861015620002b55750805b601f850160051c820191505b81811015620002d657828155600101620002c1565b5050505b505050565b81516001600160401b03811115620002fb57620002fb62000163565b62000313816200030c84546200024e565b846200028a565b602080601f8311600181146200034b5760008415620003325750858301515b600019600386901b1c1916600185901b178555620002d6565b600085815260208120601f198616915b828110156200037c578886015182559484019460019091019084016200035b565b50858210156200039b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6126f180620003bb6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80635944c753116100e3578063a22cb4651161008c578063c87b56dd11610066578063c87b56dd1461036c578063e985e9c51461037f578063f2fde38b146103c857600080fd5b8063a22cb46514610333578063a5cd621714610346578063b88d4fde1461035957600080fd5b8063715018a6116100bd578063715018a6146103055780638da5cb5b1461030d57806395d89b411461032b57600080fd5b80635944c753146102cc5780636352211e146102df57806370a08231146102f257600080fd5b806323b872dd1161014557806342842e0e1161011f57806342842e0e1461029357806342966c68146102a65780634f6ccce7146102b957600080fd5b806323b872dd1461022e5780632a55205a146102415780632f745c591461028057600080fd5b8063081812fc11610176578063081812fc146101cf578063095ea7b31461020757806318160ddd1461021c57600080fd5b806301ffc9a71461019257806306fdde03146101ba575b600080fd5b6101a56101a0366004611e84565b6103db565b60405190151581526020015b60405180910390f35b6101c26103ec565b6040516101b19190611f0f565b6101e26101dd366004611f22565b61047e565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b61021a610215366004611f64565b6104b4565b005b600b545b6040519081526020016101b1565b61021a61023c366004611f8e565b6104c3565b61025461024f366004611fca565b6105b9565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b1565b61022061028e366004611f64565b6106af565b61021a6102a1366004611f8e565b610747565b61021a6102b4366004611f22565b610767565b6102206102c7366004611f22565b610773565b61021a6102da366004611fec565b6107e5565b6101e26102ed366004611f22565b610830565b61022061030036600461203d565b61083b565b61021a6108b6565b600d5473ffffffffffffffffffffffffffffffffffffffff166101e2565b6101c26108ca565b61021a610341366004612058565b6108d9565b61021a610354366004612177565b6108e4565b61021a610367366004612217565b610a90565b6101c261037a366004611f22565b610aa7565b6101a561038d366004612293565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260076020908152604080832093909416825291909152205460ff1690565b61021a6103d636600461203d565b610ab2565b60006103e682610ac6565b92915050565b6060600280546103fb906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610427906122c6565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b600061048982610b1c565b5060008281526006602052604090205473ffffffffffffffffffffffffffffffffffffffff166103e6565b6104bf828233610b7b565b5050565b73ffffffffffffffffffffffffffffffffffffffff8216610518576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b6000610525838333610b88565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105b3576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8086166004830152602482018490528216604482015260640161050f565b50505050565b600082815260016020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116808352740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff1692820192909252829161067457506040805180820190915260005473ffffffffffffffffffffffffffffffffffffffff811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208201525b6020810151600090606490610697906bffffffffffffffffffffffff1687612348565b6106a1919061235f565b915196919550909350505050565b60006106ba8361083b565b8210610711576040517fa57d13dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810183905260440161050f565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600960209081526040808320938352929052205490565b61076283838360405180602001604052806000815250610a90565b505050565b6104bf60008233610b88565b600061077e600b5490565b82106107c0576040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600060048201526024810183905260440161050f565b600b82815481106107d3576107d361239a565b90600052602060002001549050919050565b6107ed610b9d565b6107f8838383610bf0565b6040518381527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a1505050565b60006103e682610b1c565b600073ffffffffffffffffffffffffffffffffffffffff821661088d576040517f89c62b640000000000000000000000000000000000000000000000000000000081526000600482015260240161050f565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b6108be610b9d565b6108c86000610d1d565b565b6060600380546103fb906122c6565b6104bf338383610d94565b6108ec610b9d565b6010816040516108fc91906123c9565b9081526040519081900360200190205460ff1615610976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f555549442068617320616c7265616479206265656e206d696e74656400000000604482015260640161050f565b600160108260405161098891906123c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216919091179055600e8054600091826109d7836123e5565b9190505590506109e78682610e91565b6109f581858560ff16610bf0565b6109ff8183610eab565b8573ffffffffffffffffffffffffffffffffffffffff167f0e79417d0a78fa64f8a5b2fb949e52c22d8c80192c9aa5ee1eea956332f5c1138686868686604051610a4d95949392919061241d565b60405180910390a26040518181527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a1505050505050565b610a9b8484846104c3565b6105b384848484610efb565b60606103e6826110f2565b610aba610b9d565b610ac3816111ee565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806103e657506103e68261124f565b60008181526004602052604081205473ffffffffffffffffffffffffffffffffffffffff16806103e6576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810184905260240161050f565b610762838383600161125a565b6000610b95848484611425565b949350505050565b600d5473ffffffffffffffffffffffffffffffffffffffff1633146108c8576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161050f565b60646bffffffffffffffffffffffff8216811015610c58576040517fdfd1fc1b000000000000000000000000000000000000000000000000000000008152600481018590526bffffffffffffffffffffffff831660248201526044810182905260640161050f565b73ffffffffffffffffffffffffffffffffffffffff8316610caf576040517f969f0852000000000000000000000000000000000000000000000000000000008152600481018590526000602482015260440161050f565b5060408051808201825273ffffffffffffffffffffffffffffffffffffffff93841681526bffffffffffffffffffffffff9283166020808301918252600096875260019052919094209351905190911674010000000000000000000000000000000000000000029116179055565b600d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610df9576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240161050f565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526007602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6104bf828260405180602001604052806000815250611540565b6000828152600860205260409020610ec382826124ca565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff83163b156105b3576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a0290610f709033908890879087906004016125e4565b6020604051808303816000875af1925050508015610fc9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610fc69181019061262d565b60015b611058573d808015610ff7576040519150601f19603f3d011682016040523d82523d6000602084013e610ffc565b606091505b508051600003611050576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161050f565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a0200000000000000000000000000000000000000000000000000000000146110eb576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161050f565b5050505050565b60606110fd82610b1c565b5060008281526008602052604081208054611117906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611143906122c6565b80156111905780601f1061116557610100808354040283529160200191611190565b820191906000526020600020905b81548152906001019060200180831161117357829003601f168201915b5050505050905060006111a1611557565b905080516000036111b3575092915050565b8151156111e55780826040516020016111cd92919061264a565b60405160208183030381529060405292505050919050565b610b9584611566565b6111f6610b9d565b73ffffffffffffffffffffffffffffffffffffffff8116611246576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161050f565b610ac381610d1d565b60006103e6826115ce565b808061127b575073ffffffffffffffffffffffffffffffffffffffff821615155b156113d057600061128b84610b1c565b905073ffffffffffffffffffffffffffffffffffffffff8316158015906112de57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561131d575073ffffffffffffffffffffffffffffffffffffffff80821660009081526007602090815260408083209387168352929052205460ff16155b1561136c576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161050f565b81156113ce57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260066020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600080611433858585611624565b905073ffffffffffffffffffffffffffffffffffffffff811661149d5761149884600b80546000838152600c60205260408120829055600182018355919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90155565b6114da565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114da576114da81856117a1565b73ffffffffffffffffffffffffffffffffffffffff8516611503576114fe8461184c565b610b95565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b9557610b9585856118fb565b61154a8383611958565b6107626000848484610efb565b6060600f80546103fb906122c6565b606061157182610b1c565b50600061157c611557565b9050600081511161159c57604051806020016040528060008152506115c7565b806115a684611a09565b6040516020016115b792919061264a565b6040516020818303038152906040525b9392505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f490649060000000000000000000000000000000000000000000000000000000014806103e657506103e682611ac7565b60008281526004602052604081205473ffffffffffffffffffffffffffffffffffffffff9081169083161561165e5761165e818486611b69565b73ffffffffffffffffffffffffffffffffffffffff8116156116d45761168860008560008061125a565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff85161561171d5773ffffffffffffffffffffffffffffffffffffffff85166000908152600560205260409020805460010190555b60008481526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b60006117ac8361083b565b6000838152600a602052604090205490915080821461180c5773ffffffffffffffffffffffffffffffffffffffff841660009081526009602090815260408083208584528252808320548484528184208190558352600a90915290208190555b506000918252600a6020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600981528383209183525290812055565b600b5460009061185e90600190612679565b6000838152600c6020526040812054600b80549394509092849081106118865761188661239a565b9060005260206000200154905080600b83815481106118a7576118a761239a565b6000918252602080832090910192909255828152600c9091526040808220849055858252812055600b8054806118df576118df61268c565b6001900381819060005260206000200160009055905550505050565b600060016119088461083b565b6119129190612679565b73ffffffffffffffffffffffffffffffffffffffff90931660009081526009602090815260408083208684528252808320859055938252600a9052919091209190915550565b73ffffffffffffffffffffffffffffffffffffffff82166119a8576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526000600482015260240161050f565b60006119b683836000610b88565b905073ffffffffffffffffffffffffffffffffffffffff811615610762576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526000600482015260240161050f565b60606000611a1683611c19565b600101905060008167ffffffffffffffff811115611a3657611a36612094565b6040519080825280601f01601f191660200182016040528015611a60576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611a6a57509392505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480611b5a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806103e657506103e682611cfb565b611b74838383611d92565b6107625773ffffffffffffffffffffffffffffffffffffffff8316611bc8576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810182905260240161050f565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024810182905260440161050f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611c62577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611c8e576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611cac57662386f26fc10000830492506010015b6305f5e1008310611cc4576305f5e100830492506008015b6127108310611cd857612710830492506004015b60648310611cea576064830492506002015b600a83106103e65760010192915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a0000000000000000000000000000000000000000000000000000000014806103e657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146103e6565b600073ffffffffffffffffffffffffffffffffffffffff831615801590610b9557508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e20575073ffffffffffffffffffffffffffffffffffffffff80851660009081526007602090815260408083209387168352929052205460ff165b80610b9557505060009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff908116911614919050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610ac357600080fd5b600060208284031215611e9657600080fd5b81356115c781611e56565b60005b83811015611ebc578181015183820152602001611ea4565b50506000910152565b60008151808452611edd816020860160208601611ea1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006115c76020830184611ec5565b600060208284031215611f3457600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f5f57600080fd5b919050565b60008060408385031215611f7757600080fd5b611f8083611f3b565b946020939093013593505050565b600080600060608486031215611fa357600080fd5b611fac84611f3b565b9250611fba60208501611f3b565b9150604084013590509250925092565b60008060408385031215611fdd57600080fd5b50508035926020909101359150565b60008060006060848603121561200157600080fd5b8335925061201160208501611f3b565b915060408401356bffffffffffffffffffffffff8116811461203257600080fd5b809150509250925092565b60006020828403121561204f57600080fd5b6115c782611f3b565b6000806040838503121561206b57600080fd5b61207483611f3b565b91506020830135801515811461208957600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156120de576120de612094565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561212457612124612094565b8160405280935085815286868601111561213d57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261216857600080fd5b6115c7838335602085016120c3565b600080600080600060a0868803121561218f57600080fd5b61219886611f3b565b9450602086013567ffffffffffffffff808211156121b557600080fd5b6121c189838a01612157565b95506121cf60408901611f3b565b94506060880135915060ff821682146121e757600080fd5b909250608087013590808211156121fd57600080fd5b5061220a88828901612157565b9150509295509295909350565b6000806000806080858703121561222d57600080fd5b61223685611f3b565b935061224460208601611f3b565b925060408501359150606085013567ffffffffffffffff81111561226757600080fd5b8501601f8101871361227857600080fd5b612287878235602084016120c3565b91505092959194509250565b600080604083850312156122a657600080fd5b6122af83611f3b565b91506122bd60208401611f3b565b90509250929050565b600181811c908216806122da57607f821691505b602082108103612313577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176103e6576103e6612319565b600082612395577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082516123db818460208701611ea1565b9190910192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361241657612416612319565b5060010190565b60a08152600061243060a0830188611ec5565b73ffffffffffffffffffffffffffffffffffffffff8716602084015260ff8616604084015282810360608401526124678186611ec5565b9150508260808301529695505050505050565b601f821115610762576000816000526020600020601f850160051c810160208610156124a35750805b601f850160051c820191505b818110156124c2578281556001016124af565b505050505050565b815167ffffffffffffffff8111156124e4576124e4612094565b6124f8816124f284546122c6565b8461247a565b602080601f83116001811461254b57600084156125155750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556124c2565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561259857888601518255948401946001909101908401612579565b50858210156125d457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526126236080830184611ec5565b9695505050505050565b60006020828403121561263f57600080fd5b81516115c781611e56565b6000835161265c818460208801611ea1565b835190830190612670818360208801611ea1565b01949350505050565b818103818111156103e6576103e6612319565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220676efed8ac86ec9763d95f197d6ae8f516274e258e1c3efb81ac3e9752c4910b64736f6c634300081800330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004068747470733a2f2f6261636b2d6f626a6563746966792d6465762d347232656f70653562612d65772e612e72756e2e6170702f6d657461646174612f762d312f