60806040523480156200001157600080fd5b506040518060400160405280601f81526020017f4c6f76696e61205265747265617420262057656c6c6e65737363656e746572008152506040518060400160405280600381526020017f4c5257000000000000000000000000000000000000000000000000000000000081525081600290816200008f919062000380565b508060039081620000a1919062000380565b50620000b26200010160201b60201c565b600081905550505033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000467565b600090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200018857607f821691505b6020821081036200019e576200019d62000140565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620001c9565b620002148683620001c9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002616200025b62000255846200022c565b62000236565b6200022c565b9050919050565b6000819050919050565b6200027d8362000240565b620002956200028c8262000268565b848454620001d6565b825550505050565b600090565b620002ac6200029d565b620002b981848462000272565b505050565b5b81811015620002e157620002d5600082620002a2565b600181019050620002bf565b5050565b601f8211156200033057620002fa81620001a4565b6200030584620001b9565b8101602085101562000315578190505b6200032d6200032485620001b9565b830182620002be565b50505b505050565b600082821c905092915050565b6000620003556000198460080262000335565b1980831691505092915050565b600062000370838362000342565b9150826002028217905092915050565b6200038b8262000106565b67ffffffffffffffff811115620003a757620003a662000111565b5b620003b382546200016f565b620003c0828285620002e5565b600060209050601f831160018114620003f85760008415620003e3578287015190505b620003ef858262000362565b8655506200045f565b601f1984166200040886620001a4565b60005b8281101562000432578489015182556001820191506020850194506020810190506200040b565b868310156200045257848901516200044e601f89168262000342565b8355505b6001600288020188555050505b505050505050565b611e9780620004776000396000f3fe6080604052600436106100f35760003560e01c8063449a52f81161008a578063a22cb46511610059578063a22cb46514610313578063b88d4fde1461033c578063c87b56dd14610358578063e985e9c514610395576100f3565b8063449a52f8146102455780636352211e1461026e57806370a08231146102ab57806395d89b41146102e8576100f3565b806318160ddd116100c657806318160ddd146101b957806323b872dd146101e457806342842e0e1461020057806342966c681461021c576100f3565b806301ffc9a7146100f857806306fdde0314610135578063081812fc14610160578063095ea7b31461019d575b600080fd5b34801561010457600080fd5b5061011f600480360381019061011a919061174e565b6103d2565b60405161012c9190611796565b60405180910390f35b34801561014157600080fd5b5061014a610464565b6040516101579190611841565b60405180910390f35b34801561016c57600080fd5b5061018760048036038101906101829190611899565b6104f6565b6040516101949190611907565b60405180910390f35b6101b760048036038101906101b2919061194e565b610575565b005b3480156101c557600080fd5b506101ce6106b9565b6040516101db919061199d565b60405180910390f35b6101fe60048036038101906101f991906119b8565b6106d0565b005b61021a600480360381019061021591906119b8565b6109f2565b005b34801561022857600080fd5b50610243600480360381019061023e9190611899565b610a12565b005b34801561025157600080fd5b5061026c6004803603810190610267919061194e565b610a78565b005b34801561027a57600080fd5b5061029560048036038101906102909190611899565b610ae0565b6040516102a29190611907565b60405180910390f35b3480156102b757600080fd5b506102d260048036038101906102cd9190611a0b565b610af2565b6040516102df919061199d565b60405180910390f35b3480156102f457600080fd5b506102fd610baa565b60405161030a9190611841565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190611a64565b610c3c565b005b61035660048036038101906103519190611bd9565b610d47565b005b34801561036457600080fd5b5061037f600480360381019061037a9190611899565b610dba565b60405161038c9190611841565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190611c5c565b610e58565b6040516103c99190611796565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061042d57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061045d5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461047390611ccb565b80601f016020809104026020016040519081016040528092919081815260200182805461049f90611ccb565b80156104ec5780601f106104c1576101008083540402835291602001916104ec565b820191906000526020600020905b8154815290600101906020018083116104cf57829003601f168201915b5050505050905090565b600061050182610eec565b610537576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061058082610ae0565b90508073ffffffffffffffffffffffffffffffffffffffff166105a1610f4b565b73ffffffffffffffffffffffffffffffffffffffff1614610604576105cd816105c8610f4b565b610e58565b610603576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006106c3610f53565b6001546000540303905090565b60006106db82610f58565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610742576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061074e84611024565b91509150610764818761075f610f4b565b61104b565b6107b05761077986610774610f4b565b610e58565b6107af576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610816576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610823868686600161108f565b801561082e57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506108fc856108d8888887611095565b7c0200000000000000000000000000000000000000000000000000000000176110bd565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603610982576000600185019050600060046000838152602001908152602001600020540361098057600054811461097f578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46109ea86868660016110e8565b505050505050565b610a0d83838360405180602001604052806000815250610d47565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a6c57600080fd5b610a75816110ee565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ad257600080fd5b610adc82826110fc565b5050565b6000610aeb82610f58565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b59576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b606060038054610bb990611ccb565b80601f0160208091040260200160405190810160405280929190818152602001828054610be590611ccb565b8015610c325780601f10610c0757610100808354040283529160200191610c32565b820191906000526020600020905b815481529060010190602001808311610c1557829003601f168201915b5050505050905090565b8060076000610c49610f4b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610cf6610f4b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d3b9190611796565b60405180910390a35050565b610d528484846106d0565b60008373ffffffffffffffffffffffffffffffffffffffff163b14610db457610d7d848484846112b7565b610db3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060610dc582610eec565b610dfb576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e05611407565b90506000815103610e255760405180602001604052806000815250610e50565b80610e2f84611427565b604051602001610e40929190611d38565b6040516020818303038152906040525b915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081610ef7610f53565b11158015610f06575060005482105b8015610f44575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b60008082905080610f67610f53565b11610fed57600054811015610fec5760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603610fea575b60008103610fe0576004600083600190039350838152602001908152602001600020549050610fb6565b809250505061101f565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e86110ac868684611477565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6110f9816000611480565b50565b6000805490506000820361113c576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611149600084838561108f565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506111c0836111b16000866000611095565b6111ba856116d2565b176110bd565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461126157808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050611226565b506000820361129c576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506112b260008483856110e8565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026112dd610f4b565b8786866040518563ffffffff1660e01b81526004016112ff9493929190611db1565b6020604051808303816000875af192505050801561133b57506040513d601f19601f820116820180604052508101906113389190611e12565b60015b6113b4573d806000811461136b576040519150601f19603f3d011682016040523d82523d6000602084013e611370565b606091505b5060008151036113ac576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060604051806060016040528060228152602001611e4060229139905090565b606060a060405101806040526020810391506000825281835b60011561146257600184039350600a81066030018453600a8104905080611440575b50828103602084039350808452505050919050565b60009392505050565b600061148b83610f58565b9050600081905060008061149e86611024565b915091508415611507576114ba81846114b5610f4b565b61104b565b611506576114cf836114ca610f4b565b610e58565b611505576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b61151583600088600161108f565b801561152057600082555b600160806001901b03600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506115c88361158585600088611095565b7c02000000000000000000000000000000000000000000000000000000007c010000000000000000000000000000000000000000000000000000000017176110bd565b600460008881526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000085160361164e576000600187019050600060046000838152602001908152602001600020540361164c57600054811461164b578460046000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46116b88360008860016110e8565b600160008154809291906001019190505550505050505050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61172b816116f6565b811461173657600080fd5b50565b60008135905061174881611722565b92915050565b600060208284031215611764576117636116ec565b5b600061177284828501611739565b91505092915050565b60008115159050919050565b6117908161177b565b82525050565b60006020820190506117ab6000830184611787565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117eb5780820151818401526020810190506117d0565b60008484015250505050565b6000601f19601f8301169050919050565b6000611813826117b1565b61181d81856117bc565b935061182d8185602086016117cd565b611836816117f7565b840191505092915050565b6000602082019050818103600083015261185b8184611808565b905092915050565b6000819050919050565b61187681611863565b811461188157600080fd5b50565b6000813590506118938161186d565b92915050565b6000602082840312156118af576118ae6116ec565b5b60006118bd84828501611884565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118f1826118c6565b9050919050565b611901816118e6565b82525050565b600060208201905061191c60008301846118f8565b92915050565b61192b816118e6565b811461193657600080fd5b50565b60008135905061194881611922565b92915050565b60008060408385031215611965576119646116ec565b5b600061197385828601611939565b925050602061198485828601611884565b9150509250929050565b61199781611863565b82525050565b60006020820190506119b2600083018461198e565b92915050565b6000806000606084860312156119d1576119d06116ec565b5b60006119df86828701611939565b93505060206119f086828701611939565b9250506040611a0186828701611884565b9150509250925092565b600060208284031215611a2157611a206116ec565b5b6000611a2f84828501611939565b91505092915050565b611a418161177b565b8114611a4c57600080fd5b50565b600081359050611a5e81611a38565b92915050565b60008060408385031215611a7b57611a7a6116ec565b5b6000611a8985828601611939565b9250506020611a9a85828601611a4f565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ae6826117f7565b810181811067ffffffffffffffff82111715611b0557611b04611aae565b5b80604052505050565b6000611b186116e2565b9050611b248282611add565b919050565b600067ffffffffffffffff821115611b4457611b43611aae565b5b611b4d826117f7565b9050602081019050919050565b82818337600083830152505050565b6000611b7c611b7784611b29565b611b0e565b905082815260208101848484011115611b9857611b97611aa9565b5b611ba3848285611b5a565b509392505050565b600082601f830112611bc057611bbf611aa4565b5b8135611bd0848260208601611b69565b91505092915050565b60008060008060808587031215611bf357611bf26116ec565b5b6000611c0187828801611939565b9450506020611c1287828801611939565b9350506040611c2387828801611884565b925050606085013567ffffffffffffffff811115611c4457611c436116f1565b5b611c5087828801611bab565b91505092959194509250565b60008060408385031215611c7357611c726116ec565b5b6000611c8185828601611939565b9250506020611c9285828601611939565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611ce357607f821691505b602082108103611cf657611cf5611c9c565b5b50919050565b600081905092915050565b6000611d12826117b1565b611d1c8185611cfc565b9350611d2c8185602086016117cd565b80840191505092915050565b6000611d448285611d07565b9150611d508284611d07565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000611d8382611d5c565b611d8d8185611d67565b9350611d9d8185602086016117cd565b611da6816117f7565b840191505092915050565b6000608082019050611dc660008301876118f8565b611dd360208301866118f8565b611de0604083018561198e565b8181036060830152611df28184611d78565b905095945050505050565b600081519050611e0c81611722565b92915050565b600060208284031215611e2857611e276116ec565b5b6000611e3684828501611dfd565b9150509291505056fe68747470733a2f2f63646e2e62616c696265616368626f797a2e636f6d2f6c72772fa26469706673582212206be3e59953f9ce05d5838a47a25478c6bad0c845cf7b88c6b3d2b9f47a2a45fb64736f6c63430008110033