0x60806040523480156200001157600080fd5b5060043610620000695760003560e01c8062435da5146200006e57806317de2f1f14620000b35780631dd9eaeb14620000cb5780634215d57314620000e457806377114152146200010c5780637ac4ed64146200012f575b600080fd5b620000967f000000000000000000000000864cae0255875a8ff50e0f85bdadb9b552b9b11c81565b6040516001600160a01b0390911681526020015b60405180910390f35b620000bc600081565b604051908152602001620000aa565b620000e2620000dc366004620006ba565b62000166565b005b620000967f000000000000000000000000a1a6b994d2488d868ef25223b91fc46eb5238b2f81565b620000bc775661756c744d616e616765724465706c6f796572526f6c6560401b81565b62000096620001403660046200077f565b6001600160a01b0391821660009081526020818152604080832093835292905220541690565b604051632474521560e21b8152775661756c744d616e616765724465706c6f796572526f6c6560401b60048201523360248201527f000000000000000000000000864cae0255875a8ff50e0f85bdadb9b552b9b11c6001600160a01b0316906391d1485490604401602060405180830381865afa158015620001ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002129190620007ac565b620002645760405162461bcd60e51b815260206004820152601e60248201527f564d4465706c6f7965723a206e6f7420564d4465706c6f796572526f6c65000060448201526064015b60405180910390fd5b600062000277368790038701876200084c565b6040516bffffffffffffffffffffffff193060601b1660208201524360348201529091506000906054016040516020818303038152906040528051906020012090506000620002cb828489898989620004f4565b9050620002f68360e001516001600160a01b03166354c0d5d6856000015186610100015185620005d6565b8183888888886040516200030a90620006ac565b6200031a95949392919062000973565b8190604051809103906000f590508015620003325760015b62000411576200034162000a9d565b806308c379a014156200038357506200035962000aba565b80620003665750620003c3565b8060405163754fa69360e01b81526004016200025b919062000bab565b634e487b711415620003c3576200039962000bc0565b90620003a65750620003c3565b60405163ed36b43760e01b8152600481018290526024016200025b565b3d808015620003ef576040519150601f19603f3d011682016040523d82523d6000602084013e620003f4565b606091505b50806040516274e0bd60e61b81526004016200025b919062000bab565b83516001600160a01b03908116600090815260208181526040808320610100890180518552925290912080546001600160a01b0319168484161790558551905183926200048b927f000000000000000000000000a1a6b994d2488d868ef25223b91fc46eb5238b2f909116916354c0d5d6919085620005d6565b8451610100860151604080519182526001600160a01b038481166020840152909216917f30d6d93dcd77534e956f9cb51daf08e8dc474f7c7bf9ee33f1307fb1a61d0001910160405180910390a250505050505050505050565b6001600160a01b03163b151590565b60003087604051806020016200050a90620006ac565b601f1982820381018352601f90910116604081905262000537908a908a908a908a908a9060200162000973565b60408051601f198184030181529082905262000557929160200162000be1565b60405160208183030381529060405280519060200120604051602001620005b3939291906001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f198184030181529190528051602090910120979650505050505050565b6040516001600160e01b031960e086901b1681526001600160a01b038085166004830152602482018490528216604482015285908590606401600060405180830381600087803b1580156200062a57600080fd5b505af19250505080156200063c575060015b6200064b576200034162000a9d565b604080518381526001600160a01b03838116602083015260e087901b6001600160e01b031916828401529151918516917fa613f35067e186c2dab0121558733997dc4254e56d4debcd03286e6f36e2386c9181900360600190a25050505050565b6146f18062000c1583390190565b60008060008060008587036101c0811215620006d557600080fd5b61016080821215620006e657600080fd5b87965086013594505061018085013592506101a085013567ffffffffffffffff808211156200071457600080fd5b818801915088601f8301126200072957600080fd5b8135818111156200073957600080fd5b8960206060830285010111156200074f57600080fd5b9699959850939650602001949392505050565b80356001600160a01b03811681146200077a57600080fd5b919050565b600080604083850312156200079357600080fd5b6200079e8362000762565b946020939093013593505050565b600060208284031215620007bf57600080fd5b81518015158114620007d057600080fd5b9392505050565b601f8201601f1916810167ffffffffffffffff811182821017156200080c57634e487b7160e01b600052604160045260246000fd5b6040525050565b604051610160810167ffffffffffffffff811182821017156200084657634e487b7160e01b600052604160045260246000fd5b60405290565b600061016082840312156200086057600080fd5b6200086a62000813565b620008758362000762565b8152620008856020840162000762565b6020820152620008986040840162000762565b6040820152620008ab6060840162000762565b6060820152620008be6080840162000762565b6080820152620008d160a0840162000762565b60a0820152620008e460c0840162000762565b60c0820152620008f760e0840162000762565b60e082015261010083810135908201526101208084013590820152610140928301359281019290925250919050565b8183526000602080850194508260005b858110156200096857813587528282013583880152604080830135908801526060968701969091019060010162000936565b509495945050505050565b85516001600160a01b0316815260006101c06020880151620009a060208501826001600160a01b03169052565b506040880151620009bc60408501826001600160a01b03169052565b506060880151620009d860608501826001600160a01b03169052565b506080880151620009f460808501826001600160a01b03169052565b5060a088015162000a1060a08501826001600160a01b03169052565b5060c088015162000a2c60c08501826001600160a01b03169052565b5060e088015162000a4860e08501826001600160a01b03169052565b506101008089015181850152506101208089015181850152506101408089015181850152508661016084015285610180840152806101a084015262000a91818401858762000926565b98975050505050505050565b600060033d111562000ab75760046000803e5060005160e01c5b90565b600060443d101562000ac95790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171562000afa57505050505090565b828501915081518181111562000b135750505050505090565b843d870101602082850101111562000b2e5750505050505090565b62000b3f60208286010187620007d7565b509095945050505050565b60005b8381101562000b6757818101518382015260200162000b4d565b8381111562000b77576000848401525b50505050565b6000815180845262000b9781602086016020860162000b4a565b601f01601f19169290920160200192915050565b602081526000620007d0602083018462000b7d565b60008060233d111562000bdd576020600460003e50506000516001905b9091565b6000835162000bf581846020880162000b4a565b83519083019062000c0b81836020880162000b4a565b0194935050505056fe6101806040523480156200001257600080fd5b50604051620046f1380380620046f1833981016040819052620000359162000d88565b828285600001518661010001518760e001518562000067846001600160a01b03166200063960201b620014b41760201c565b620000ad5760405162461bcd60e51b815260206004820152601160248201527022a69d1034b73b30b634b2103a37b5b2b760791b60448201526064015b60405180910390fd5b620000cc826001600160a01b03166200063960201b620014b41760201c565b6200011a5760405162461bcd60e51b815260206004820152601b60248201527f454d3a20696e76616c6964207363686564756c6553746f7261676500000000006044820152606401620000a4565b82620001695760405162461bcd60e51b815260206004820152601360248201527f454d3a20696e76616c69642073657276696365000000000000000000000000006044820152606401620000a4565b85620001b85760405162461bcd60e51b815260206004820152601c60248201527f454d3a2073746172742074696d652063616e2774206265207a65726f000000006044820152606401620000a4565b6001600160a01b038085166080526000849055821660a052620001dc868662000648565b60408051600080825260208201909252620002379162000230565b6200021c60405180606001604052806000815260200160008152602001600081525090565b815260200190600190039081620001f75790505b5062000705565b62000243868262000774565b50505060208801518894506001600160a01b031615159250620002a09150505760405162461bcd60e51b815260206004820152601160248201527015934e881a5b9d985b1a59081d985d5b1d607a1b6044820152606401620000a4565b620002c381604001516001600160a01b03166200063960201b620014b41760201c565b620003115760405162461bcd60e51b815260206004820152601760248201527f564d3a20696e76616c696420726f6c654d616e616765720000000000000000006044820152606401620000a4565b6200033481606001516001600160a01b03166200063960201b620014b41760201c565b620003825760405162461bcd60e51b815260206004820152601a60248201527f564d3a20696e76616c696420657865637574654d616e616765720000000000006044820152606401620000a4565b620003a581608001516001600160a01b03166200063960201b620014b41760201c565b620003f35760405162461bcd60e51b815260206004820152601560248201527f564d3a20696e76616c6964206e6176696761746f7200000000000000000000006044820152606401620000a4565b620004168160a001516001600160a01b03166200063960201b620014b41760201c565b620004645760405162461bcd60e51b815260206004820152601960248201527f564d3a20696e76616c696420726563697069656e74526f6c65000000000000006044820152606401620000a4565b620004878160c001516001600160a01b03166200063960201b620014b41760201c565b620004d55760405162461bcd60e51b815260206004820152601560248201527f564d3a20696e76616c696420626c61636b4c69737400000000000000000000006044820152606401620000a4565b610120810151620005295760405162461bcd60e51b815260206004820152601560248201527f564d3a20696e76616c69642076616c696461746f7200000000000000000000006044820152606401620000a4565b610140810151620005725760405162461bcd60e51b81526020600482015260126024820152712b269d1034b73b30b634b21039b2ba3a32b960711b6044820152606401620000a4565b60408501516001600160a01b0390811660c09081526060870151821660e05260a0870151600380549184166001600160a01b03199283161790559087015182166101005260208701516004805491841691909216179055608086015116610120908152850151610140908152850151610160526200060a6e32bc31b430b733b2aa37aa37b5b2b760891b63edda63bf60e01b620008ed565b6200062e6d65786368616e6765546f4974656d60901b631795ec0160e31b620008ed565b5050505050620010c4565b6001600160a01b03163b151590565b80620006975760405162461bcd60e51b815260206004820152601760248201527f454d3a20726f756e642063616e2774206265207a65726f0000000000000000006044820152606401620000a4565b6000620006a362000987565b60408101839052805190915015620006bd578051620006bf565b825b815282620006ed57604081015142908181620006df57620006df62000eb7565b0690036020820152620006f5565b805160208201525b620007008162000a2f565b505050565b60a0516001600160a01b0316634e2533bd608051600054846040518463ffffffff1660e01b81526004016200073d9392919062000f29565b600060405180830381600087803b1580156200075857600080fd5b505af11580156200076d573d6000803e3d6000fd5b5050505050565b6000816200078162000a67565b15620007d05760405162461bcd60e51b815260206004820152601860248201527f454d3a20706f6c69637920616c726561647920657869737400000000000000006044820152606401620000a4565b6000815111620008175760405162461bcd60e51b8152602060048201526011602482015270454d3a207a65726f20706f6c696369657360781b6044820152606401620000a4565b4284620008248362000705565b60006200083062000a7b565b90508360008151811062000848576200084862000f5b565b602090810291909101810151810151825260009082018190526040820183905284518591906200087c576200087c62000f5b565b6020026020010151600001518262000895919062000f71565b6060820152620008a58162000b25565b7fd6e16629871000e6e49093ecb22fd96f0d922b8dfb777675083213c877f5466b8484604051620008d892919062000f98565b60405180910390a15060019695505050505050565b81620009138160009081526001602052604090205460e01b6001600160e01b0319161590565b620009615760405162461bcd60e51b815260206004820152601d60248201527f5665726966794b65793a20616c726561647920726567697374657265640000006044820152606401620000a4565b6000908152600160205260409020805463ffffffff191660e09290921c91909117905550565b620009ac60405180606001604052806000815260200160008152602001600081525090565b60a0516080516000546040516354abfd1760e11b81526001600160a01b039283166004820152602481019190915291169063a957fa2e90604401606060405180830381865afa15801562000a04573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a2a919062000fbc565b905090565b60a0516001600160a01b031663ec7aa1b9608051600054846040518463ffffffff1660e01b81526004016200073d9392919062000fe2565b600062000a7362000b89565b511515919050565b62000aa76040518060800160405280600081526020016000815260200160008152602001600081525090565b60a051608051600054604051631ee866fd60e21b81526001600160a01b0392831660048201526024810191909152911690637ba19bf490604401608060405180830381865afa15801562000aff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a2a919062001023565b60a05160805160005460408051634e78ed4b60e01b81526001600160a01b039384166004820152602481019290925284516044830152602085015160648301528401516084820152606084015160a4820152911690634e78ed4b9060c4016200073d565b60a051608051600054604051634dce567d60e01b81526060936001600160a01b031692634dce567d9262000bd3926004016001600160a01b03929092168252602082015260400190565b600060405180830381865afa15801562000bf1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a2a91908101906200108c565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171562000c575762000c5762000c1b565b60405290565b80516001600160a01b038116811462000c7557600080fd5b919050565b60006060828403121562000c8d57600080fd5b604051606081016001600160401b038111828210171562000cb25762000cb262000c1b565b80604052508091508251815260208301516020820152604083015160408201525092915050565b600082601f83011262000ceb57600080fd5b815160206001600160401b038083111562000d0a5762000d0a62000c1b565b604051601f19603f8560051b01168101818110838211171562000d315762000d3162000c1b565b6040528381526060938402860183019383820192508785111562000d5457600080fd5b8387015b8581101562000d7b5762000d6d898262000c7a565b845292840192810162000d58565b5090979650505050505050565b6000806000808486036101c081121562000da157600080fd5b6101608082121562000db257600080fd5b62000dbc62000c31565b915062000dc98762000c5d565b825262000dd96020880162000c5d565b602083015262000dec6040880162000c5d565b604083015262000dff6060880162000c5d565b606083015262000e126080880162000c5d565b608083015262000e2560a0880162000c5d565b60a083015262000e3860c0880162000c5d565b60c083015262000e4b60e0880162000c5d565b60e08301526101008781015190830152610120808801519083015261014080880151908301528601516101808701516101a088015192965090945092506001600160401b0381111562000e9d57600080fd5b62000eab8782880162000cd9565b91505092959194509250565b634e487b7160e01b600052601260045260246000fd5b600081518084526020808501945080840160005b8381101562000f1e5762000f0a8783518051825260208082015190830152604090810151910152565b606096909601959082019060010162000ee1565b509495945050505050565b60018060a01b038416815282602082015260606040820152600062000f52606083018462000ecd565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000f9357634e487b7160e01b600052601160045260246000fd5b500190565b60408152600062000fad604083018562000ecd565b90508260208301529392505050565b60006060828403121562000fcf57600080fd5b62000fdb838362000c7a565b9392505050565b6001600160a01b03841681526020810183905260a081016200101b60408301848051825260208082015190830152604090810151910152565b949350505050565b6000608082840312156200103657600080fd5b604051608081016001600160401b03811182821017156200105b576200105b62000c1b565b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b6000602082840312156200109f57600080fd5b81516001600160401b03811115620010b657600080fd5b6200101b8482850162000cd9565b60805160a05160c05160e051610100516101205161014051610160516134c46200122d60003960008181610202015281816105cc01526108af01526000818161025e01528181610bd501526110b701526000818161023701528181610447015281816107ad01528181610a9501528181610f7c015261134c01526000818161034a01526122f9015260008181610323015281816104ad0152818161065d0152818161080a0152818161094001528181610af201528181610fd901526113a901526000818161019701526116870152600081816101db0152818161194001528181611a8501528181611d840152818161219e015281816122560152818161253d0152818161260f01526126d301526000818161041801528181610b980152818161107a0152818161190801528181611ab201528181611d51015281816121cb015281816122830152818161256a0152818161263c01528181612700015261297d01526134c46000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c8063bcba0121116100de578063ed409a4a11610097578063f639443c11610071578063f639443c146103da578063f971fac6146103ed578063fbfa77cf14610400578063fc0c546a1461041357600080fd5b8063ed409a4a1461039d578063edda63bf146103b2578063ef7a2f86146103c557600080fd5b8063bcba012114610316578063c81f39991461031e578063cdab73b514610345578063d308211f1461036c578063d598d4c914610374578063ea0d5dcd1461037d57600080fd5b806360e232a91161014b57806389b7ebe21161012557806389b7ebe2146102d35780639551ae44146102db578063b33ddcef146102f0578063bcaf60081461030357600080fd5b806360e232a9146102a357806372615037146102b8578063807149f2146102c057600080fd5b8062435da5146101925780630ad31b8f146101d65780633f3108f7146101fd5780634215d5731461023257806342f7022e1461025957806354d96ab214610280575b600080fd5b6101b97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101b97f000000000000000000000000000000000000000000000000000000000000000081565b6102247f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101cd565b6101b97f000000000000000000000000000000000000000000000000000000000000000081565b6102247f000000000000000000000000000000000000000000000000000000000000000081565b61029361028e366004612ba4565b61043a565b60405190151581526020016101cd565b6102b66102b1366004612c8f565b6105c7565b005b6102936107a0565b6102b66102ce366004612caa565b6108aa565b610224610a0d565b6102e3610a57565b6040516101cd9190612cc3565b6003546101b9906001600160a01b031681565b610293610311366004612ce4565b610a88565b610224610ddb565b6101b97f000000000000000000000000000000000000000000000000000000000000000081565b6101b97f000000000000000000000000000000000000000000000000000000000000000081565b610224610e44565b61022460005481565b61039061038b366004612c8f565b610e8e565b6040516101cd9190612d39565b6103a5610f65565b6040516101cd9190612da9565b6102936103c0366004612ce4565b610f6f565b6103cd61128f565b6040516101cd9190612dbc565b6102936103e8366004612ba4565b61133f565b6102246103fb366004612de7565b61148e565b6004546101b9906001600160a01b031681565b6101b97f000000000000000000000000000000000000000000000000000000000000000081565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048d5760405162461bcd60e51b815260040161048490612e11565b60405180910390fd5b60405163f12c2a6960e01b8152632a6cb55960e11b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f12c2a69906104e2908490600401612e48565b602060405180830381865afa1580156104ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105239190612e5d565b61053f5760405162461bcd60e51b815260040161048490612e86565b825160011461059b5760405162461bcd60e51b815260206004820152602260248201527f564d3a2063616e2774207573652045786368616e6765506f6c69637920617272604482015261617960f01b6064820152608401610484565b6105bf84846000815181106105b2576105b2612ebd565b60200260200101516114c3565b949350505050565b6105f17f00000000000000000000000000000000000000000000000000000000000000003361165e565b61063d5760405162461bcd60e51b815260206004820152601c60248201527f564d3a206d73672073656e646572206973206e6f7420736574746572000000006044820152606401610484565b60405163f12c2a6960e01b81526360e232a960e01b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f12c2a6990610692908490600401612e48565b602060405180830381865afa1580156106af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d39190612e5d565b6106ef5760405162461bcd60e51b815260040161048490612e86565b6001600160a01b0382166107455760405162461bcd60e51b815260206004820152601960248201527f564d3a20696e76616c6964207661756c742061646472657373000000000000006044820152606401610484565b600480546001600160a01b0319166001600160a01b038416908117909155604080519182524360208301527fb203833ec18b2adbda3d053e2b5eb1e9e6ce0434914276a32066f21475e70d4091015b60405180910390a15050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107ea5760405162461bcd60e51b815260040161048490612e11565b60405163f12c2a6960e01b8152637261503760e01b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f12c2a699061083f908490600401612e48565b602060405180830381865afa15801561085c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108809190612e5d565b61089c5760405162461bcd60e51b815260040161048490612e86565b6108a46116f4565b91505090565b6108d47f00000000000000000000000000000000000000000000000000000000000000003361165e565b6109205760405162461bcd60e51b815260206004820152601c60248201527f564d3a206d73672073656e646572206973206e6f7420736574746572000000006044820152606401610484565b60405163f12c2a6960e01b8152634038a4f960e11b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f12c2a6990610975908490600401612e48565b602060405180830381865afa158015610992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b69190612e5d565b6109d25760405162461bcd60e51b815260040161048490612e86565b6109dd6000836117d0565b6040518281527fe13ec1fa9c3ede43997fc070c234a83909ba45575dd0ad079ea7138418cc846590602001610794565b6000806000610a1b30611880565b5092509250506000610a2d83836119c0565b50509050818181518110610a4357610a43612ebd565b602002602001015160200151935050505090565b610a7b60405180606001604052806000815260200160008152602001600081525090565b610a83611a47565b905090565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ad25760405162461bcd60e51b815260040161048490612e11565b60405163f12c2a6960e01b8152631795ec0160e31b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f12c2a6990610b27908490600401612e48565b602060405180830381865afa158015610b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b689190612e5d565b610b845760405162461bcd60e51b815260040161048490612e86565b6000610b8f84612f43565b600080549192507f0000000000000000000000000000000000000000000000000000000000000000919080610bcc8986631795ec0160e31b611b2f565b91509150610bfa7f00000000000000000000000000000000000000000000000000000000000000008261165e565b610c425760405162461bcd60e51b815260206004820152601960248201527815934e881d995c9a599e481d985b1a59185d1bdc8819985a5b603a1b6044820152606401610484565b610c66826001600160a01b0316600090815260026020526040902080546001019055565b6003546020860151604051633950935160e01b81526001600160a01b0392831660048201526024810191909152908516906339509351906044016020604051808303816000875af1158015610cbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce39190612e5d565b5060035460408681015160208801519151639f812d6560e01b81526001600160a01b038881166004830152602482018890526044820192909252606481019290925290911690639f812d65906084016020604051808303816000875af1158015610d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d759190612e5d565b50604085810151602080880151835192835290820152308183015290516001600160a01b0384811692908716917f2f46cff747bf36f7bdf4376f942febba912263d84ec30048646fed238ab37c3f9181900360600190a350600198975050505050505050565b600080600080610dea30611880565b50925092509250610dfe8360200151421190565b15610e39576000610e0f83836119c0565b50509050818181518110610e2557610e25612ebd565b602002602001015160200151945050610e3e565b815193505b50505090565b6000806000610e5230611880565b5092509250506000610e6483836119c0565b50509050818181518110610e7a57610e7a612ebd565b602002602001015160400151935050505090565b6040805180820190915260008082526020820152600080600080610eb186611880565b93509350935093506000610ec584846119c0565b505090506000838281518110610edd57610edd612ebd565b60200260200101519050600081602001511115610f5957825142811015610f5757604087015160008215610f115782610f14565b88515b90508180610f228342613004565b610f2c9190613031565b610f37906001613053565b610f41919061306b565b610f4b9082613053565b86525050600060208501525b505b50909695505050505050565b6060610a83611d37565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fb95760405162461bcd60e51b815260040161048490612e11565b60405163f12c2a6960e01b815263edda63bf60e01b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f12c2a699061100e908490600401612e48565b602060405180830381865afa15801561102b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104f9190612e5d565b61106b5760405162461bcd60e51b815260040161048490612e86565b600061107684612f43565b90507f00000000000000000000000000000000000000000000000000000000000000006000806110ae888563edda63bf60e01b611b2f565b915091506110dc7f00000000000000000000000000000000000000000000000000000000000000008261165e565b6111245760405162461bcd60e51b815260206004820152601960248201527815934e881d995c9a599e481d985b1a59185d1bdc8819985a5b603a1b6044820152606401610484565b611148826001600160a01b0316600090815260026020526040902080546001019055565b611156828560200151611df3565b6004805460208601516040516323b872dd60e01b81526001600160a01b0392831693810193909352848216602484015260448301528416906323b872dd906064016020604051808303816000875af11580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da9190612e5d565b6112265760405162461bcd60e51b815260206004820152601f60248201527f564d3a2065786368616e676520746f6b656e20746f2075736572206661696c006044820152606401610484565b6040848101516020808701516004548451938452918301526001600160a01b03908116828401529151848316928616917f52e9cb34729bc0bac76a26368d0d9fcdf307dabc7bae94201ed184e6f9312839919081900360600190a3506001979650505050505050565b6112ba6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000806112c630611880565b50925092505060008060006112db85856119c0565b92509250925084602001518314156112f7575092949350505050565b604051806080016040528085858151811061131457611314612ebd565b6020026020010151602001518152602001848152602001838152602001828152509550505050505090565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113895760405162461bcd60e51b815260040161048490612e11565b60405163f12c2a6960e01b8152633d8e510f60e21b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f12c2a69906113de908490600401612e48565b602060405180830381865afa1580156113fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141f9190612e5d565b61143b5760405162461bcd60e51b815260040161048490612e86565b428410156114845760405162461bcd60e51b8152602060048201526016602482015275564d3a20696e76616c69642073746172742074696d6560501b6044820152606401610484565b6105bf8484611fa3565b6000818152600160205260408120546114ab90849060e01b612106565b90505b92915050565b6001600160a01b03163b151590565b6000818382806114d230611880565b50925092505060006114e483836119c0565b5050905081516000141561153a5760405162461bcd60e51b815260206004820152601b60248201527f454d3a20706f6c6963696573206e6f74207265676973746572656400000000006044820152606401610484565b81516001141561158b5783156115865760405162461bcd60e51b815260206004820152601160248201527008a9a7440d2dcecc2d8d2c840d2dcc8caf607b1b6044820152606401610484565b6115da565b808411801561159a5750815184105b6115da5760405162461bcd60e51b815260206004820152601160248201527008a9a7440d2dcecc2d8d2c840d2dcc8caf607b1b6044820152606401610484565b848285815181106115ed576115ed612ebd565b602002602001018190525061160182612184565b6040805186518152602080880151908201528682015181830152426060820152905185917f5df38cf0d5fab6d0fd2ef76ccd41bdae188c5d11415deb545227aab62aca4aa7919081900360800190a2506001979650505050505050565b604051632474521560e21b8152600481018390526001600160a01b0382811660248301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906391d1485490604401602060405180830381865afa1580156116d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ab9190612e5d565b60006116fe61222a565b6117415760405162461bcd60e51b815260206004820152601460248201527311534e881c1bdb1a58de481b9bdd08195e1a5cdd60621b6044820152606401610484565b6040805160008082526020820190925261179791611791565b61177e60405180606001604052806000815260200160008152602001600081525090565b81526020019060019003908161175a5790505b50612184565b6040514281527fd966e360b6098ee60936422e4c40d006c97472190505fd69899365b4242be0e89060200160405180910390a150600190565b8061181d5760405162461bcd60e51b815260206004820152601760248201527f454d3a20726f756e642063616e2774206265207a65726f0000000000000000006044820152606401610484565b6000611827611a47565b6040810183905280519091501561183f578051611841565b825b81528261186a5760408101514290818161185d5761185d61301b565b0690036020820152611872565b805160208201525b61187b8161223c565b505050565b6118a460405180606001604052806000815260200160008152602001600081525090565b6118cf6040518060800160405280600081526020016000815260200160008152602001600081525090565b60606118ee604051806040016040528060008152602001600081525090565b60005460405163b9a51eeb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482019290925286821660448201527f00000000000000000000000000000000000000000000000000000000000000009091169063b9a51eeb90606401600060405180830381865afa158015611989573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119b1919081019061319a565b93509350935093509193509193565b600080600080600185516119d49190613004565b60408701516060880151602089015192935090915b83811015611a3757814211611a065795509093509150611a409050565b819250878160010181518110611a1e57611a1e612ebd565b60209081029190910101515191909101906001016119e9565b50919450925090505b9250925092565b611a6b60405180606001604052806000815260200160008152602001600081525090565b6000546040516354abfd1760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a957fa2e91611aee917f0000000000000000000000000000000000000000000000000000000000000000916004016001600160a01b03929092168252602082015260400190565b606060405180830381865afa158015611b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a83919061324a565b60608201515160009081908490611c035780516001600160a01b03878116911614611b9c5760405162461bcd60e51b815260206004820152601a60248201527f564d3a20766572696679206d73672073656e646572206661696c0000000000006044820152606401610484565b80516080820151909350611bfc90611bb48587612106565b604080850151602080870151835191820194909452918201526060810191909152608001604051602081830303815290604052805190602001206122ad90919063ffffffff16565b9150611c98565b611c198160600151611bb4836000015187612106565b6001600160a01b031681600001516001600160a01b031614611c745760405162461bcd60e51b815260206004820152601460248201527315934e881d995c9a599e481d5cd95c8819985a5b60621b6044820152606401610484565b8051608082015160608301518051602090910120919450611c9591906122ad565b91505b611ca1836122d1565b15611cdf5760405162461bcd60e51b815260206004820152600e60248201526d2b269d10313630b1b5903ab9b2b960911b6044820152606401610484565b611ce8826122d1565b15611d2b5760405162461bcd60e51b81526020600482015260136024820152722b269d10313630b1b5903b30b634b230ba37b960691b6044820152606401610484565b50935093915050565b50565b600054604051634dce567d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201929092526060917f00000000000000000000000000000000000000000000000000000000000000001690634dce567d90604401600060405180830381865afa158015611dcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a839190810190613266565b81816000808080611e0386611880565b93509350935093504284600001511115611e585760405162461bcd60e51b815260206004820152601660248201527511534e88195e18da185b99d9481b9bdd081cdd185c9d60521b6044820152606401610484565b611e63848484612366565b8094508195505050600082846020015181518110611e8357611e83612ebd565b60200260200101519050600081602001511115611eec578351861115611ee45760405162461bcd60e51b8152602060048201526016602482015275454d3a20706572696f6420636170206578636565647360501b6044820152606401610484565b835186900384525b604081015115611f8b57602085015182518114611f1c576040518060400160405280828152602001600081525092505b8683602001818151611f2e9190613053565b905250604082015160208401511115611f895760405162461bcd60e51b815260206004820152601b60248201527f454d3a20706572696f64207573657220636170206578636565647300000000006044820152606401610484565b505b611f988786868686612523565b505050505050505050565b600081611fae61222a565b15611ffb5760405162461bcd60e51b815260206004820152601860248201527f454d3a20706f6c69637920616c726561647920657869737400000000000000006044820152606401610484565b60008151116120405760405162461bcd60e51b8152602060048201526011602482015270454d3a207a65726f20706f6c696369657360781b6044820152606401610484565b428461204b83612184565b60006120556125ca565b90508360008151811061206a5761206a612ebd565b6020908102919091018101518101518252600090820181905260408201839052845185919061209b5761209b612ebd565b602002602001015160000151826120b29190613053565b60608201526120c0816126b9565b7fd6e16629871000e6e49093ecb22fd96f0d922b8dfb777675083213c877f5466b84846040516120f192919061329b565b60405180910390a15060019695505050505050565b6001600160a01b03821660009081526002602090815260409182902054825130606090811b6bffffffffffffffffffffffff199081168386015246603484015296901b90951660548601526001600160e01b03199093166068850152606c8085019390935281518085039093018352608c9093019052805191012090565b600054604051634e2533bd60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691634e2533bd916121f5917f00000000000000000000000000000000000000000000000000000000000000009186906004016132bd565b600060405180830381600087803b15801561220f57600080fd5b505af1158015612223573d6000803e3d6000fd5b5050505050565b6000612234611d37565b511515919050565b60005460405163ec7aa1b960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ec7aa1b9916121f5917f00000000000000000000000000000000000000000000000000000000000000009186906004016132ed565b60008060006122bc858561272a565b915091506122c98161279a565b509392505050565b604051631cf3c04f60e21b81523060048201526001600160a01b0382811660248301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906373cf013c90604401602060405180830381865afa158015612342573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ae9190612e5d565b61238a60405180606001604052806000815260200160008152602001600081525090565b6123b56040518060800160405280600081526020016000815260200160008152602001600081525090565b60006123c48660200151421190565b905080156125135760006123d6612955565b6040880151602089015191925088918891889181906123f59042613004565b6123ff9190613031565b61240a906001613053565b612414919061306b565b836020018181516124259190613053565b9052506000808061243685856119c0565b925092509250828560200151101561245e576020850183905260408501829052606085018190525b8684848151811061247157612471612ebd565b602002602001015160200151116124a55783838151811061249457612494612ebd565b6020026020010151602001516124a7565b865b855283517f0501aea9c9209b34403b145385ac96a491f2ffd2171e6a4310f1b624dbdd6b939084908690829081106124e1576124e1612ebd565b6020026020010151426040516124f993929190613325565b60405180910390a15093975091955061251b945050505050565b858592509250505b935093915050565b6000546040516332ec8c2b60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163cbb230ac9161259c917f0000000000000000000000000000000000000000000000000000000000000000918a908a908a908a908a9060040161335b565b600060405180830381600087803b1580156125b657600080fd5b505af1158015611f98573d6000803e3d6000fd5b6125f56040518060800160405280600081526020016000815260200160008152602001600081525090565b600054604051631ee866fd60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691637ba19bf491612678917f0000000000000000000000000000000000000000000000000000000000000000916004016001600160a01b03929092168252602082015260400190565b608060405180830381865afa158015612695573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8391906133fe565b600054604051634e78ed4b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691634e78ed4b916121f5917f000000000000000000000000000000000000000000000000000000000000000091869060040161341a565b6000808251604114156127615760208301516040840151606085015160001a612755878285856129ea565b94509450505050612793565b82516040141561278b5760208301516040840151612780868383612ad7565b935093505050612793565b506000905060025b9250929050565b60008160048111156127ae576127ae61345f565b14156127b75750565b60018160048111156127cb576127cb61345f565b14156128195760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610484565b600281600481111561282d5761282d61345f565b141561287b5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610484565b600381600481111561288f5761288f61345f565b14156128e85760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610484565b60048160048111156128fc576128fc61345f565b1415611d345760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610484565b600480546040516370a0823160e01b81526001600160a01b03918216928101929092526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156129c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a839190613475565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612a215750600090506003612ace565b8460ff16601b14158015612a3957508460ff16601c14155b15612a4a5750600090506004612ace565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612a9e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612ac757600060019250925050612ace565b9150600090505b94509492505050565b6000806001600160ff1b03831681612af460ff86901c601b613053565b9050612b02878288856129ea565b935093505050935093915050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715612b4957612b49612b10565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612b7857612b78612b10565b604052919050565b600067ffffffffffffffff821115612b9a57612b9a612b10565b5060051b60200190565b6000806040808486031215612bb857600080fd5b8335925060208085013567ffffffffffffffff811115612bd757600080fd5b8501601f81018713612be857600080fd5b8035612bfb612bf682612b80565b612b4f565b8181526060918202830184019184820191908a841115612c1a57600080fd5b938501935b83851015612c625780858c031215612c375760008081fd5b612c3f612b26565b853581528686013587820152878601358882015283529384019391850191612c1f565b508096505050505050509250929050565b80356001600160a01b0381168114612c8a57600080fd5b919050565b600060208284031215612ca157600080fd5b6114ab82612c73565b600060208284031215612cbc57600080fd5b5035919050565b815181526020808301519082015260408083015190820152606081016114ae565b60008060408385031215612cf757600080fd5b612d0083612c73565b9150602083013567ffffffffffffffff811115612d1c57600080fd5b830160a08186031215612d2e57600080fd5b809150509250929050565b8151815260208083015190820152604081016114ae565b600081518084526020808501945080840160005b83811015612d9e57612d8b8783518051825260208082015190830152604090810151910152565b6060969096019590820190600101612d64565b509495945050505050565b6020815260006114ab6020830184612d50565b81518152602080830151908201526040808301519082015260608083015190820152608081016114ae565b60008060408385031215612dfa57600080fd5b612e0383612c73565b946020939093013593505050565b6020808252601f908201527f564d3a206d73672073656e646572206973206e6f74206e6176696761746f7200604082015260600190565b6001600160e01b031991909116815260200190565b600060208284031215612e6f57600080fd5b81518015158114612e7f57600080fd5b9392505050565b6020808252601e908201527f564d3a2066756e6374696f6e206973206e6f742065786563757461626c650000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600082601f830112612ee457600080fd5b813567ffffffffffffffff811115612efe57612efe612b10565b612f11601f8201601f1916602001612b4f565b818152846020838601011115612f2657600080fd5b816020850160208301376000918101602001919091529392505050565b600060a08236031215612f5557600080fd5b60405160a0810167ffffffffffffffff8282108183111715612f7957612f79612b10565b81604052612f8685612c73565b835260208501356020840152604085013560408401526060850135915080821115612fb057600080fd5b612fbc36838701612ed3565b60608401526080850135915080821115612fd557600080fd5b50612fe236828601612ed3565b60808301525092915050565b634e487b7160e01b600052601160045260246000fd5b60008282101561301657613016612fee565b500390565b634e487b7160e01b600052601260045260246000fd5b60008261304e57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561306657613066612fee565b500190565b600081600019048311821515161561308557613085612fee565b500290565b60006060828403121561309c57600080fd5b6130a4612b26565b905081518152602082015160208201526040820151604082015292915050565b6000608082840312156130d657600080fd5b6040516080810181811067ffffffffffffffff821117156130f9576130f9612b10565b8060405250809150825181526020830151602082015260408301516040820152606083015160608201525092915050565b600082601f83011261313b57600080fd5b8151602061314b612bf683612b80565b8281526060928302850182019282820191908785111561316a57600080fd5b8387015b8581101561318d57613180898261308a565b845292840192810161316e565b5090979650505050505050565b6000806000808486036101408112156131b257600080fd5b6131bc878761308a565b94506131cb87606088016130c4565b935060e086015167ffffffffffffffff808211156131e857600080fd5b6131f489838a0161312a565b9450604060ff198401121561320857600080fd5b6040519250604083019150828210818311171561322757613227612b10565b506040526101008601518152610120909501516020860152509194909350909190565b60006060828403121561325c57600080fd5b6114ab838361308a565b60006020828403121561327857600080fd5b815167ffffffffffffffff81111561328f57600080fd5b6105bf8482850161312a565b6040815260006132ae6040830185612d50565b90508260208301529392505050565b60018060a01b03841681528260208201526060604082015260006132e46060830184612d50565b95945050505050565b6001600160a01b03841681526020810183905260a081016105bf60408301848051825260208082015190830152604090810151910152565b83815260a0810161334d60208301858051825260208082015190830152604090810151910152565b826080830152949350505050565b6001600160a01b038881168252602082018890528616604082015260006101a061339c60608401888051825260208082015190830152604090810151910152565b855160c0840152602086015160e084015260408601516101008401526060860151610120840152806101408401526133d681840186612d50565b8451610160850152602085015161018085015291506133f29050565b98975050505050505050565b60006080828403121561341057600080fd5b6114ab83836130c4565b6001600160a01b03841681526020810183905260c081016105bf6040830184805182526020810151602083015260408101516040830152606081015160608301525050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561348757600080fd5b505191905056fea2646970667358221220c2faaa9959153b770d3ee7b88459a1cc8265f7eb13996f41d8d68489d4d85d7d64736f6c634300080a0033a264697066735822122024141d5b2915664beba6af37a4b6b266693167be1d6d5eec774a89b0ccd58b4764736f6c634300080a0033