6080604052600060025534801561001557600080fd5b50600080546001600160a01b031916331790556119b1806100376000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80636352211e116100ad578063b88d4fde11610071578063b88d4fde14610285578063bf8fbbd214610298578063c87b56dd146102a0578063e8a3d485146102b3578063e985e9c5146102bb57600080fd5b80636352211e1461021b57806370a082311461022e57806395d89b4114610241578063a22cb4651461025f578063a436965b1461027257600080fd5b80631249c58b116100f45780631249c58b146101dc57806318160ddd146101e457806323b872dd146101ec57806332cb6b0c146101ff57806342842e0e1461020857600080fd5b806301ffc9a71461013157806306fdde0314610159578063081812fc14610186578063095ea7b3146101b15780630f2cdd6c146101c6575b600080fd5b61014461013f3660046110ae565b6102ce565b60405190151581526020015b60405180910390f35b60408051808201909152600881526747617320576f726b60c01b60208201525b60405161015091906110fc565b61019961019436600461112f565b610320565b6040516001600160a01b039091168152602001610150565b6101c46101bf366004611164565b610366565b005b6101ce600181565b604051908152602001610150565b6101c4610424565b6002546101ce565b6101c46101fa36600461118e565b610511565b6101ce6103db81565b6101c461021636600461118e565b610521565b61019961022936600461112f565b61053c565b6101ce61023c3660046111ca565b610547565b604080518082019091526002815261475760f01b6020820152610179565b6101c461026d3660046111e5565b610590565b61017961028036600461112f565b610625565b6101c4610293366004611237565b6106bf565b6101ce600081565b6101796102ae36600461112f565b6106d0565b6101796107b4565b6101446102c9366004611313565b6107f3565b60006301ffc9a760e01b6001600160e01b0319831614806102ff57506380ac58cd60e01b6001600160e01b03198316145b8061031a5750635b5e139f60e01b6001600160e01b03198316145b92915050565b600061032d826002541190565b61034a576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061037182610821565b9050806001600160a01b0316836001600160a01b03160361039157600080fd5b336001600160a01b038216146103c8576103ab81336107f3565b6103c8576040516367d9dca160e11b815260040160405180910390fd5b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b3360016103db8161043460025490565b61043e919061135c565b111561047b5760405162461bcd60e51b815260206004820152600760248201526614dbdb1913dd5d60ca1b60448201526064015b60405180910390fd5b3360009081526004602052604090819020546001911c67ffffffffffffffff166104a5908361135c565b11156104de5760405162461bcd60e51b81526020600482015260086024820152671058d8d31a5b5a5d60c21b6044820152606401610472565b6104e661088f565b60025460009081526001602052604090209061050290826113ef565b5061050d82826108af565b5050565b61051c83838361098a565b505050565b61051c838383604051806020016040528060008152506106bf565b600061031a82610821565b60008160000361056a576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526004602052604090205467ffffffffffffffff1690565b336001600160a01b038316036105b95760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001602052600090815260409020805461063e9061136f565b80601f016020809104026020016040519081016040528092919081815260200182805461066a9061136f565b80156106b75780601f1061068c576101008083540402835291602001916106b7565b820191906000526020600020905b81548152906001019060200180831161069a57829003601f168201915b505050505081565b6106ca84848461098a565b50505050565b60606106dd826002541190565b6107215760405162461bcd60e51b8152602060048201526015602482015274746f6b656e20646f6573206e6f742065786973747360581b6044820152606401610472565b600061072c83610b23565b60405160200161073c91906114af565b6040516020818303038152906040529050600061078961075b85610be9565b61076484610cf2565b6040516020016107759291906114cb565b604051602081830303815290604052610cf2565b90508060405160200161079c919061158c565b60405160208183030381529060405292505050919050565b60606040518060600160405280602e815260200161194e602e91396040516020016107df91906115d1565b604051602081830303815290604052905090565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6000816002548110156108765760008181526003602052604081205490600160e01b82169003610874575b8060000361086d57506000190160008181526003602052604090205461084c565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b6060600061089e336014610e45565b9050600061086d8260026008610fe1565b600254826000036108d257604051622e076360e81b815260040160405180910390fd5b816000036108f35760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660009081526004602090815260408083208054680100000000000000018702019055838352600390915290204260a01b84176001841460e11b179055808083015b6040516001830192906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821061093e5750600255505050565b600061099582610821565b9050836001600160a01b0316816001600160a01b0316146109c85760405162a1148160e81b815260040160405180910390fd5b6000828152600560205260408120546001600160a01b03908116919086163314806109f857506109f886336107f3565b80610a0b57506001600160a01b03821633145b905080610a2b57604051632ce44b5f60e11b815260040160405180910390fd5b8115610a4e57600084815260056020526040902080546001600160a01b03191690555b6001600160a01b038681166000908152600460209081526040808320805460001901905592881682528282208054600101905586825260039052908120600160e11b4260a01b8817811790915584169003610ad957600184016000818152600360205260408120549003610ad7576002548114610ad75760008181526003602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b600081815260016020526040812080546060929190610b419061136f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6d9061136f565b8015610bba5780601f10610b8f57610100808354040283529160200191610bba565b820191906000526020600020905b815481529060010190602001808311610b9d57829003601f168201915b5050505050905080604051602001610bd29190611600565b604051602081830303815290604052915050919050565b606081600003610c105750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610c3a5780610c2481611857565b9150610c339050600a83611886565b9150610c14565b60008167ffffffffffffffff811115610c5557610c55611221565b6040519080825280601f01601f191660200182016040528015610c7f576020820181803683370190505b5090505b8415610cea57610c9460018361189a565b9150610ca1600a866118ad565b610cac90603061135c565b60f81b818381518110610cc157610cc16118c1565b60200101906001600160f81b031916908160001a905350610ce3600a86611886565b9450610c83565b949350505050565b60608151600003610d1157505060408051602081019091526000815290565b600060405180606001604052806040815260200161190e6040913990506000600384516002610d40919061135c565b610d4a9190611886565b610d559060046118d7565b67ffffffffffffffff811115610d6d57610d6d611221565b6040519080825280601f01601f191660200182016040528015610d97576020820181803683370190505b509050600182016020820185865187015b80821015610e03576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250610da8565b5050600386510660018114610e1f5760028114610e3257610e3a565b603d6001830353603d6002830353610e3a565b603d60018303535b509195945050505050565b60606000610e548360026118d7565b610e5f90600261135c565b67ffffffffffffffff811115610e7757610e77611221565b6040519080825280601f01601f191660200182016040528015610ea1576020820181803683370190505b509050600360fc1b81600081518110610ebc57610ebc6118c1565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610eeb57610eeb6118c1565b60200101906001600160f81b031916908160001a9053506000610f0f8460026118d7565b610f1a90600161135c565b90505b6001811115610f92576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610f4e57610f4e6118c1565b1a60f81b828281518110610f6457610f646118c1565b60200101906001600160f81b031916908160001a90535060049490941c93610f8b816118f6565b9050610f1d565b50831561086d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610472565b6060836000610ff0858561189a565b67ffffffffffffffff81111561100857611008611221565b6040519080825280601f01601f191660200182016040528015611032576020820181803683370190505b509050845b848110156110a457828181518110611051576110516118c1565b01602001516001600160f81b0319168261106b888461189a565b8151811061107b5761107b6118c1565b60200101906001600160f81b031916908160001a9053508061109c81611857565b915050611037565b5095945050505050565b6000602082840312156110c057600080fd5b81356001600160e01b03198116811461086d57600080fd5b60005b838110156110f35781810151838201526020016110db565b50506000910152565b602081526000825180602084015261111b8160408501602087016110d8565b601f01601f19169190910160400192915050565b60006020828403121561114157600080fd5b5035919050565b80356001600160a01b038116811461115f57600080fd5b919050565b6000806040838503121561117757600080fd5b61118083611148565b946020939093013593505050565b6000806000606084860312156111a357600080fd5b6111ac84611148565b92506111ba60208501611148565b9150604084013590509250925092565b6000602082840312156111dc57600080fd5b61086d82611148565b600080604083850312156111f857600080fd5b61120183611148565b91506020830135801515811461121657600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561124d57600080fd5b61125685611148565b935061126460208601611148565b925060408501359150606085013567ffffffffffffffff8082111561128857600080fd5b818701915087601f83011261129c57600080fd5b8135818111156112ae576112ae611221565b604051601f8201601f19908116603f011681019083821181831017156112d6576112d6611221565b816040528281528a60208487010111156112ef57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561132657600080fd5b61132f83611148565b915061133d60208401611148565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561031a5761031a611346565b600181811c9082168061138357607f821691505b6020821081036113a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561051c57600081815260208120601f850160051c810160208610156113d05750805b601f850160051c820191505b81811015610b1b578281556001016113dc565b815167ffffffffffffffff81111561140957611409611221565b61141d81611417845461136f565b846113a9565b602080601f831160018114611452576000841561143a5750858301515b600019600386901b1c1916600185901b178555610b1b565b600085815260208120601f198616915b8281101561148157888601518255948401946001909101908401611462565b508582101561149f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082516114c18184602087016110d8565b9190910192915050565b727b226e616d65223a2022476173576f726b202360681b815282516000906114fa8160138501602088016110d8565b7f222c20226465736372697074696f6e223a202247617320576f726b206f6e20436013918401918201527f6861696e222c2022696d616765223a2022646174613a696d6167652f7376672b60338201526a1e1b5b0ed8985cd94d8d0b60aa1b6053820152835161157181605e8401602088016110d8565b61227d60f01b605e9290910191820152606001949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516115c481601d8501602087016110d8565b91909101601d0192915050565b66697066733a2f2f60c81b8152600082516115f38160078501602087016110d8565b9190910160070192915050565b7f3c737667206865696768743d22323030222077696474683d223230302220786d81527f6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672260208201527f207072657365727665417370656374526174696f3d22784d696e594d696e206d60408201527f656574222076696577426f783d2230203020313030302031303030223e00000060608201527f3c646566733e3c72616469616c4772616469656e742069643d22676c6f772220607d8201527f63783d22302e3235222063793d22302e32352220723d22302e3335223e3c7374609d8201527f6f70206f66667365743d223025222073746f702d636f6c6f723d22236533613860bd8201527f623022202f3e3c73746f70206f66667365743d2231303025222073746f702d6360dd820152666f6c6f723d222360c81b60fd8201526000610104835161175481838601602088016110d8565b83016117818282017f22202f3e3c2f72616469616c4772616469656e743e3c2f646566733e000000009052565b7f3c7265637420786d6c6e733d22687474703a2f2f7777772e77332e6f72672f326101208201527f3030302f737667222077696474683d223130302522206865696768743d22313061014082015272181291103334b6361e913bb434ba329110179f60691b6101608201527f3c636972636c652063783d22353030222063793d223530302220723d223530306101738201527511103334b6361e913ab9361411b3b637bb949110179f60511b6101938201526101a9810191505061184d81651e17b9bb339f60d11b9052565b6006019392505050565b60006001820161186957611869611346565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261189557611895611870565b500490565b8181038181111561031a5761031a611346565b6000826118bc576118bc611870565b500690565b634e487b7160e01b600052603260045260246000fd5b60008160001904831182151516156118f1576118f1611346565b500290565b60008161190557611905611346565b50600019019056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f516d5a3165576859386d784a586545466661636163514d70766953613679364633447375655254574a7339777332a2646970667358221220cc89e826b12d39c2372ab8b41467bff471cbec90bbc289f8acb2ae07dcb2692164736f6c63430008100033