diff --git a/README.md b/README.md index ec3c0f3..9bb3048 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ![nano-run](https://user-images.githubusercontent.com/6597086/97143787-4f70db80-179e-11eb-9b9c-7e16bfff845e.png) -Lightweight async request runner. +Lightweight async request runner. GitOps friendly. A simplified version of [trusted-cgi](https://github.com/reddec/trusted-cgi) designed for async processing extreme amount of requests. @@ -23,6 +23,14 @@ Please note that the project is being developed in free time, as a non-profitabl All codes, bugs, opinions, and other related subjects should not be considered as the official position, official project, or company-backed project to any of the companies for/with which I worked before or/and at present. +TODO: + +* On attempt failed job +* On failed job +* On success job +* Per endpoint swagger +* Pickup file as an artifact + ![sample-nano-run](https://user-images.githubusercontent.com/6597086/98463432-303e6900-21f6-11eb-9632-806b1c99813b.gif) diff --git a/server/api/adapter.go b/server/api/adapter.go index 8633f56..d28a9df 100644 --- a/server/api/adapter.go +++ b/server/api/adapter.go @@ -31,7 +31,7 @@ func Expose(router gin.IRouter, wrk *worker.Worker, defaultWaitTime time.Duratio return } gctx.Header("X-Correlation-Id", id) - gctx.Redirect(http.StatusSeeOther, id) + gctx.Redirect(http.StatusSeeOther, id+"?"+gctx.Request.URL.RawQuery) }) router.PUT("/", handler.createSyncTask) taskRoutes := router.Group("/:id") @@ -73,7 +73,7 @@ func (wh *workerHandler) createSyncTask(gctx *gin.Context) { gctx.Header("X-Correlation-Id", tracker.ID()) select { case <-tracker.Done(): - gctx.Redirect(http.StatusSeeOther, tracker.ID()+"/completed") + gctx.Redirect(http.StatusSeeOther, tracker.ID()+"/completed?"+gctx.Request.URL.RawQuery) case <-time.After(queryParams.Wait): gctx.AbortWithStatus(http.StatusGatewayTimeout) } @@ -122,7 +122,7 @@ func (wh *workerHandler) retry(gctx *gin.Context) { return } gctx.Header("X-Correlation-Id", id) - gctx.Redirect(http.StatusSeeOther, id) + gctx.Redirect(http.StatusSeeOther, id+"?"+gctx.Request.URL.RawQuery) } func (wh *workerHandler) completeRequest(gctx *gin.Context) { diff --git a/server/runner/embedded/templates/bindata.go b/server/runner/embedded/templates/bindata.go index 80d3eaf..14b9ca9 100644 --- a/server/runner/embedded/templates/bindata.go +++ b/server/runner/embedded/templates/bindata.go @@ -144,7 +144,7 @@ func unitCronInfoHtml() (*asset, error) { return a, nil } -var _unitInfoHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5b\xef\x72\xdb\xb8\x11\xff\x9e\xa7\xd8\x41\xfd\xc1\x9e\x31\x49\xdf\xb5\xce\xb4\x29\xc5\x19\xd7\x49\x73\xce\x24\x99\x34\xf6\x35\x9f\x21\x72\x2d\xa2\x06\x01\x1e\x08\x4a\xd6\xa9\xfa\xde\x6f\x79\x80\xce\xf4\xcf\x2b\xf4\x53\x9f\xe7\x5e\xa0\x7d\x84\x0e\x48\x51\xa2\x64\x52\x02\x68\xe7\xae\xd3\x7a\x32\x31\x25\x62\x7f\xbb\x8b\xdd\xc5\xee\x02\x70\x98\xea\x8c\x03\xa7\x62\x32\x22\x28\x48\xf4\x2c\x4c\x91\x26\xd1\x33\x00\x80\x30\x43\x4d\x21\x4e\xa9\x2a\x50\x8f\x48\xa9\x6f\xbd\x5f\x92\xf6\x2b\x41\x33\x1c\x91\x29\xc3\x59\x2e\x95\x26\x10\x4b\xa1\x51\xe8\x11\x99\xb1\x44\xa7\xa3\x04\xa7\x2c\x46\xaf\xfa\x70\x0a\x4c\x30\xcd\x28\xf7\x8a\x98\x72\x1c\x7d\x75\x0a\x45\xaa\x98\xb8\xf3\xb4\xf4\x6e\x99\x1e\x09\x69\x98\x07\x35\xf7\x70\x2c\x93\x79\xf4\x2c\x4c\xd8\x14\x62\x4e\x8b\x62\x44\x0c\x36\x65\x02\x55\x23\x81\xa0\xeb\x77\x82\x4e\xc7\x54\x41\xfd\xcb\xc3\xfb\x9c\x8a\xc4\x2b\xb2\xe6\x0b\xce\x26\xa9\x86\xf1\xa4\x7e\x58\xd1\x57\x18\x74\x1b\xc1\x1b\x2b\x2a\x12\x02\xa9\xc2\xdb\x11\x59\x2c\xfc\x8f\xc8\x81\x04\x64\xb9\x24\xd1\x7b\x2a\xa4\xf7\xb1\x14\x61\x40\x5b\x00\x5b\x02\x72\x4e\xf3\x02\x1b\xae\xcd\xe7\x16\xbf\x8a\xa4\xe4\x3b\x4c\x8d\x22\x99\xf2\x68\xa9\xe5\xce\xd8\x6a\x3c\x67\xad\xf1\x1e\xd3\x98\x75\x8c\x7a\xa0\x8d\xc7\x99\xb8\x7b\xa0\x49\x29\x98\xae\xd5\xb9\xe0\x1c\xcc\xa7\x62\x4b\x9f\x35\x54\xc0\xd9\x17\x16\x25\x56\x52\x6c\x44\x29\xe2\x14\x93\x92\xa3\x8b\x38\x8b\x05\xbb\x05\xff\xa2\xd4\xa9\x54\xec\x7b\x4c\x96\xcb\x6e\x59\xac\xa5\xb6\x94\x9c\x96\x3a\x0d\xb8\x9c\xc8\x52\x57\xf2\xbf\xad\x1e\x3b\x05\xdf\x27\x3c\x8a\x5d\x89\xc3\xa0\xe4\x2d\xdf\x0a\x12\x36\x6d\x7d\x2c\x72\x2a\x76\x3c\x47\xe3\xbd\x26\xd1\x62\xe1\xbf\x95\x13\x26\x96\xcb\x30\x30\x83\x56\xf1\x11\x08\x3a\x6d\x85\x0a\x55\x8c\x7a\x9c\x8e\x91\x8f\xc8\x58\x21\x4d\x62\x55\x66\xe3\x76\x30\xc8\xb5\x63\x76\xbe\xdf\x99\xcb\xcd\x98\xd5\x94\x86\xb4\xd7\xdb\x40\x33\xcd\x71\x44\x68\xe3\x74\x24\x5a\xfb\xde\xc3\xe9\xe9\x67\x02\x34\xd6\x6c\x8a\x6b\x3c\x03\x52\xe9\xff\xad\x60\xda\x7f\x4f\x33\x34\x73\xd0\xc6\x0b\x03\xc9\x1f\xce\x47\x2b\x6a\x95\x9c\x91\xde\x78\xde\xd5\xbe\xfd\x96\xaa\xa4\x2b\x5a\x77\x86\x78\x66\x21\xeb\x0b\x92\xf4\x7c\x6b\x68\xa5\xd4\x1e\xd7\xdc\xd6\xb3\xc7\xd7\xd2\xf3\x1e\x66\xf9\x3e\xe0\x19\xd3\x29\x54\xe8\x3d\xc0\x9b\xa1\x26\xe6\x3e\x28\x36\xa5\xda\x4c\x76\xe5\x94\x2b\x6b\x08\xa9\x01\xef\x73\x59\x60\x02\x72\x8a\x0a\x2e\x3e\x5c\x91\xe8\xdf\x7f\xfd\xfc\xb7\xb6\x5f\xf6\x23\x23\x2f\x10\x0c\xfc\x35\xc6\xa5\x32\xf1\xbc\x05\x5f\xc9\x48\x57\xd1\x4e\x35\x93\xc2\x80\xff\xf9\xef\xff\xfa\xe7\x67\x4b\xfc\x07\x01\xd7\xa9\xdd\x44\xc3\x31\x47\x01\xfe\xa5\x92\xe2\x04\xce\x0e\xd0\xc0\x3a\x36\xdb\x72\x36\xeb\x99\x22\xd1\x0f\x9f\xff\xf1\x14\xf2\xed\x7b\x1f\x06\x3d\xd6\x0d\xd3\xe7\x5b\x2e\x56\x94\xe3\x4a\x4a\xc8\xc6\xde\xd7\x60\x96\x0f\x2f\x2b\x35\x26\x24\xba\x94\xe2\x96\x4d\x4a\x55\x4d\x6c\x18\xa4\xcf\x7b\x00\x77\xfd\xbb\x5e\x82\xfa\x97\xd3\x84\x77\x47\x5a\xb7\x8a\x5e\x65\xff\xca\xcb\xd7\x3e\x76\x78\xf6\x13\xdd\x8a\x59\xaf\xc8\xbc\x9f\x93\x68\x45\x1e\x06\x89\xde\xcf\xb4\x46\x48\x76\x10\x7e\x45\xa2\x70\x1c\xcd\x4d\x3e\x1a\x47\x21\x8b\xc0\x83\x2e\xf7\x0e\x03\x16\x85\x41\x92\x1c\xd6\xcb\x38\xf7\x50\x5d\x2e\x3e\x5c\x01\x8a\x24\x97\x4c\xe8\x47\x28\x74\x90\xaa\xa2\x8c\x65\x82\x76\x43\xab\xe1\x42\x16\xb1\x62\xb9\x8e\xde\x5c\x83\xc2\xef\x4a\xa6\x30\x01\x2d\x21\x41\x8d\xb1\x36\x73\x04\xa5\xe2\x61\xb0\x1e\x67\x0f\xbd\x22\x48\x64\x5c\x66\x28\xb4\x3f\x53\x4c\xe3\xf1\xb1\xc0\x19\x7c\xfb\xf1\xed\x31\xf1\xfd\xa0\xfe\x47\x73\x16\x6c\x2f\x8e\x01\x39\x85\x19\x13\x89\x9c\xf9\x5c\xc6\x95\x4f\x9f\xf8\x26\x3b\x9d\x9c\x84\x81\x8b\x20\x61\x60\x37\x1f\x96\x4e\x70\x70\x05\xea\xb4\xff\x3b\x99\x58\x38\x72\xa7\xcd\x9b\x69\x31\x10\x26\x37\x1e\x92\xb2\x93\xff\xa5\x14\x71\xa9\x14\x8a\x78\xfe\x48\x31\x3e\x49\x75\x87\xaa\x18\x2c\xc9\x85\xd6\x98\xe5\xa6\x70\x78\x94\x18\x0d\xcc\x60\x39\xae\x84\x46\x35\xa5\xfc\x91\x72\x34\x30\x36\x72\x54\xb9\x09\xbf\x83\x8d\x3d\x81\x8c\x99\x20\x03\x17\x95\x26\x5b\xdd\xb0\x0c\x65\xa9\x81\xde\x6a\x54\x30\x4b\x59\x9c\x42\xae\x64\x8c\x45\x01\x33\xc6\x39\x8c\x11\x0a\x14\x9a\x44\xab\x91\x5f\x7a\x01\x6a\x17\x23\xfe\x8a\xa7\x85\x8e\x1b\x72\xdf\x72\x74\x5d\x70\x38\x40\xff\xf0\xa7\xbf\xd8\x02\x1f\x8c\x73\xb0\x5a\x33\x60\x80\xf1\xae\xaf\x5e\x5f\xbd\xbf\xd9\xb1\xdd\x6b\x45\x63\xbc\x2d\x39\xe8\x9a\xc2\x46\xb6\x1f\xcf\xca\x8d\x74\xff\xe7\xd6\xb6\x41\xea\xce\x0f\xf4\xbe\xca\xbd\x58\x68\x28\xd8\xf7\x43\x73\xc5\x41\x15\xb6\x8c\xf6\x8e\xde\x7f\xac\x79\x5a\x5b\xc0\xc6\x56\x4e\x76\xb2\xb1\x91\xd5\xac\x0e\xcb\x02\x26\x9b\x31\x31\x81\x84\x29\x8c\xb5\x54\x43\xb3\xa3\xdb\xc4\x1b\xae\x2f\x99\xb2\x9c\xa2\xb0\x28\xf3\xa8\xd0\x54\xb3\x38\x0c\xcc\xb3\x25\x95\x69\x68\x0a\x3d\x37\xab\x8c\x29\x76\x6f\xb9\x9c\x79\xf7\x2f\x4c\xff\x25\x7f\x0d\x33\x69\x3a\x5b\x85\xf4\xee\x05\x54\xbf\x3c\xca\x79\x95\xd6\xb6\xf7\x20\xf6\xeb\xe4\x60\xe8\x90\x45\xc9\x5c\xd0\xcc\x28\xd1\xb1\x99\xd2\x81\xfd\x04\x36\xaf\x32\xae\x54\x70\xdc\x91\x75\x4f\x1e\x7c\x1b\x4f\x18\x39\x19\x5a\xe1\x5f\xca\x2c\xa3\x22\x79\xc4\xaa\xdb\x94\x14\x2b\x24\x9b\x8a\xa2\x57\x9a\xeb\x14\xb9\x45\x69\x73\x50\x96\x0a\xc7\xae\xb6\xd9\x6f\xaf\x30\x48\x78\xdf\xe6\xda\xd6\x26\xd9\x36\x68\x2b\x68\x5e\x89\x29\x53\x52\x98\x3e\x62\x1f\x1f\xeb\x76\xb9\x85\xd7\xdf\x2c\xc3\x80\x86\x79\x97\x46\xd3\x31\x47\x4f\x61\x91\x4b\x51\xb0\xe9\xbe\xfd\xa1\x35\x79\x45\xb3\x05\x00\x35\xcc\x58\xaa\x04\x15\x37\xb5\x5d\xfd\x45\xa1\x15\xcb\xb1\x6b\x23\xab\x1b\x78\x73\x36\x70\x78\xac\x72\x68\xf5\x74\x1a\x99\xc6\x2d\x0c\x74\xea\x46\xf5\x7b\xca\x4b\x07\xb2\x30\xb0\x15\xcb\x60\x3a\x28\x5b\x9f\x57\xd8\x8c\x5d\x2c\x14\x15\x13\x84\xa3\xbb\xd3\xa3\x29\xbc\x18\x81\x6d\x05\x03\xae\xb3\x5a\x13\x58\xaa\xb0\x45\x94\x2b\x8c\x16\x8b\xa3\x3b\x13\xbb\xe6\xd9\x8d\x65\xe0\xca\xd3\x08\xb9\x58\x1c\x4d\x0d\x3b\x17\x5a\x7b\x6b\xda\x16\x69\x2b\x54\x3b\x6b\x86\x41\x15\x44\x07\x62\xb9\x7f\x81\xb2\x79\x3d\x56\x41\xdf\xea\xd6\xaf\x51\x95\xb8\xe0\x68\xb5\x08\x37\x9b\xa9\x4f\xb0\xea\x5d\xb4\x77\x5f\x9f\x7e\xdd\xdb\x5a\xb1\xb7\x78\x59\xe5\x55\x87\x9d\xc6\x0d\x47\x76\x0b\xfe\x9b\x4f\x37\xfe\x2b\x61\x6c\xe9\x12\x8a\x5d\x99\xf3\xcd\xa7\x1b\xbb\xbc\xb9\x41\xe9\xc8\x9f\x4c\xb8\x85\x4f\xb5\x45\xb5\x58\x54\x7a\xbc\x46\xfd\x0d\xd2\x04\x95\x09\x26\xb7\xbd\x3c\xf3\x93\x56\xb4\x0e\x11\x68\x53\x64\x80\x63\x04\xd6\x56\xf9\x5d\x89\x6a\x7e\x23\xef\x50\x3c\x91\x71\x2a\x40\xd0\x06\xf1\x27\x34\x52\x4b\xad\xd7\xa8\x3f\x50\x45\xb3\x61\xa6\xca\x0d\xe9\x7f\x85\xa5\x6a\x87\x7b\x4a\x53\xd5\x88\x3f\xb9\xad\xda\x8a\xfd\xef\x04\xd6\x6f\x68\xc1\xe2\x27\x32\x54\x85\xf5\x04\x16\x5a\x2c\x56\x62\x55\x27\xd9\x05\xfc\x11\xfe\x20\x99\x00\x72\x0a\xc4\xb6\x95\x01\xb7\xcd\x98\x9e\x86\xc2\x16\x69\x6f\xe3\xd1\x4d\xda\x41\xb2\x7b\xc6\xbf\xf9\xd8\x7a\x6c\xd2\xe2\xa5\x92\xe2\x95\xd0\x8a\x61\xd1\x42\xdf\x2e\x11\xfa\x8f\xb6\x77\xdf\x3e\x3c\xde\xae\x46\xdc\x4a\x95\x41\x86\x3a\x95\xc9\x88\xe4\xb2\xe8\xcb\xd9\x16\x67\xe1\x7d\x43\xf7\x9d\x89\xaf\x69\xba\xcf\xc6\xaf\x37\xd7\x44\xfa\x0e\xba\x7b\xb9\x5a\x14\x20\xbb\x74\x03\x9a\x2f\xf8\x92\x0d\x18\x38\x36\x61\x30\xac\x65\x18\xd2\x8c\x35\x94\xd7\x39\xc6\x8e\x6d\x9c\x75\x15\x0f\xae\x7d\x19\x38\xf6\x66\xd0\xee\xcf\x98\x48\xf0\xfe\x14\x8e\x50\x68\x35\x77\x6d\xd4\x60\xc8\xcc\xc3\xd0\x86\x0d\xea\x8b\x4b\xf5\xf5\x9b\xea\x62\xd5\x62\x51\xcb\xbf\x5c\x9a\xb5\xb5\xd6\xc1\x37\xb6\xf1\xdf\xd2\x31\x72\x38\xce\x15\x13\x1a\xc8\xcf\xc8\x4a\xd1\x13\xb3\xcc\xf6\xdc\x60\xda\xcb\xd6\xb9\xdb\x83\x47\x69\xb9\x4a\xcd\x6d\x8d\xcc\x7f\xc3\x92\x32\x0c\x6b\x57\x9d\x1c\xd6\x25\x3f\x83\x4b\xfb\x09\xb6\x2d\x28\x1c\xee\x33\x5b\x43\x86\x64\xbc\x9e\x57\x61\x60\xb2\x89\x6d\xc6\x6b\x4f\xd4\x26\xa9\x0d\xbe\xab\x65\x93\xc8\x2c\x93\x98\x6b\x02\xeb\x49\x5e\x37\x6a\xbe\x3f\x6d\x0d\xda\x2b\x34\x63\xa8\xc2\xf5\xb5\x45\xa3\xb7\x17\x4b\xa1\x95\xe4\x64\x75\x43\xb7\x92\x17\x72\x4e\x63\x4c\x25\x4f\x50\x8d\x48\x73\x5e\x94\xd3\x39\x97\x34\x21\x51\x18\x34\x48\x5f\x60\xb7\xa2\x7e\x5b\x6a\x2d\xd7\x57\x18\xc7\x5a\xc0\x58\x0b\x2f\x57\x2c\xa3\x6a\x4e\x40\xcf\x73\x1c\x91\xa2\x1c\x67\x4c\x93\xa8\x40\x91\x84\x41\x4d\xe2\xe8\x74\x1d\x55\xd6\xb6\x1f\x76\x97\x59\x4f\xe0\x73\x3f\xca\xfd\xc0\xb7\xb4\xd0\x70\x7e\xd6\x9c\xf8\xed\x29\x85\xdc\x2f\x6b\x0d\x2e\x7d\xbe\x48\xc9\x63\x5b\xea\x58\x27\x5a\x53\xa0\x5c\xbd\x74\xd8\x2e\xd6\x69\x75\xed\xc1\x8d\xe2\x52\x66\x39\x47\xed\x48\xb5\xb9\xda\x62\x43\x65\x97\x83\xac\x8b\x25\xdb\x22\x69\x5d\x1c\xf9\xdf\xb0\x42\x4b\x35\x87\x73\x9b\xfb\x91\xe0\x7e\x20\xe0\x9a\x93\x9b\xea\x67\x15\x15\xc1\x62\xe1\x5f\xbd\x5c\x2e\x83\xaa\xb5\x34\x4f\x4e\xd5\x8d\xe3\x3e\x74\xb5\x7f\xed\xbf\x43\x4d\xfd\x4b\x85\x54\x63\x72\xa1\xfd\xdf\x4a\x95\x51\x0d\xe4\xec\x6b\x78\x43\x05\x9c\x3d\x87\xaf\xce\x5f\x9c\xfd\xe2\xc5\xd9\xb9\x7f\x76\x76\x06\xef\xae\x6f\x88\xf3\x86\xb7\xeb\xb4\xd4\x0d\x7f\x2d\xd8\xca\x2b\x1d\x8b\xd8\x1a\x65\x1b\xc2\x56\x39\x47\x51\x1d\x2f\x68\x34\x3f\x4c\x40\xae\xe4\x44\x61\x51\xb8\x32\x74\x2d\xcc\x9c\x7d\xa2\xba\x47\x5c\xcd\x5d\xfb\xca\x99\x2d\x8e\x5d\x90\xdb\xef\x79\x58\x04\xf9\xc1\x82\x72\x48\x15\xe8\xbe\xed\xd1\xfc\xe2\x4c\xdc\x81\x42\x3e\x22\xd5\x5d\x84\x22\x45\xd4\x0f\xfe\x1e\xa3\xbe\xdd\x40\x80\xc4\x45\x41\x80\x8c\xa5\xd4\x85\x56\x34\xf7\x32\xaa\x51\x31\xca\xbd\x04\x0b\x36\x11\x7e\xc6\x84\x6f\xc6\x98\xa6\xe8\xd9\xb3\x30\x58\xfd\x91\x51\x90\xea\x8c\x47\xff\x09\x00\x00\xff\xff\xaa\x46\xb7\xa3\x09\x35\x00\x00") +var _unitInfoHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x1b\xdb\x72\xdb\xb8\xf5\x3d\x5f\x71\x06\xf5\xc3\x66\x26\x14\xbd\xdb\x7a\xa7\x4d\x29\x76\xbc\x4e\x9a\x75\x26\xc9\xa4\xb1\xb7\x79\x86\xc8\x63\x11\x35\x08\x70\x01\x50\xb6\x56\xd5\x7b\xdf\xf2\x01\x9d\xe9\xe5\x17\xfa\xd4\xef\xd9\x1f\x68\x3f\xa1\x03\x52\x94\x28\x99\x94\x00\x5a\xd9\xe9\xb4\x7c\xb0\x44\x11\xe7\x86\x73\xc5\xe1\x71\x94\x99\x9c\x03\xa7\x62\x3a\x26\x28\x48\xfc\x24\xca\x90\xa6\xf1\x13\x00\x80\x28\x47\x43\x21\xc9\xa8\xd2\x68\xc6\xa4\x34\x37\xc1\x2f\x49\xfb\x91\xa0\x39\x8e\xc9\x8c\xe1\x5d\x21\x95\x21\x90\x48\x61\x50\x98\x31\xb9\x63\xa9\xc9\xc6\x29\xce\x58\x82\x41\x75\xf3\x0c\x98\x60\x86\x51\x1e\xe8\x84\x72\x1c\x7f\xf9\x0c\x74\xa6\x98\xb8\x0d\x8c\x0c\x6e\x98\x19\x0b\x69\x89\x87\x35\xf5\x68\x22\xd3\x79\xfc\x24\x4a\xd9\x0c\x12\x4e\xb5\x1e\x13\x8b\x9b\x32\x81\xaa\xe1\x40\xd0\xf5\x33\x41\x67\x13\xaa\xa0\xfe\x08\xf0\xbe\xa0\x22\x0d\x74\xde\xfc\xc0\xd9\x34\x33\x30\x99\xd6\x5f\x56\xf0\x15\x0e\xba\x8d\x21\x98\x28\x2a\x52\x02\x99\xc2\x9b\x31\x59\x2c\x46\x1f\x90\x03\x09\xc9\x72\x49\xe2\x77\x54\xc8\xe0\x43\x29\xa2\x90\xb6\x10\x6c\x31\xc8\x39\x2d\x34\x36\x54\x9b\xfb\x16\xbd\x0a\xa4\xe4\x3b\x44\xad\x20\xb9\x0a\x68\x69\xe4\xce\xda\x6a\x3d\x67\xad\xf5\x01\x33\x98\x77\xac\x7a\x20\x4d\xc0\x99\xb8\x7d\x20\x49\x29\x98\xa9\xc5\x39\xe7\x1c\xec\x9d\xde\x92\x67\x8d\x2a\xe4\xec\x33\xb3\x92\x28\x29\x36\xac\xe8\x24\xc3\xb4\xe4\xe8\xc3\xce\x62\xc1\x6e\x60\x74\x5e\x9a\x4c\x2a\xf6\x03\xa6\xcb\x65\x37\x2f\xce\x5c\x3b\x72\x4e\x4b\x93\x85\x5c\x4e\x65\x69\x2a\xfe\xdf\x54\x5f\x3b\x19\xdf\xc7\x3c\x8a\x5d\x8e\xa3\xb0\xe4\x2d\xdb\x0a\x53\x36\x6b\xdd\xea\x82\x8a\x1d\xcb\x31\x78\x6f\x48\xbc\x58\x8c\xde\xc8\x29\x13\xcb\x65\x14\xda\x45\x2b\xff\x08\x05\x9d\xb5\x5c\x85\x2a\x46\x03\x4e\x27\xc8\xc7\x64\xa2\x90\xa6\x89\x2a\xf3\x49\xdb\x19\xe4\xda\x30\x3b\x9f\xef\xec\xe5\x66\xcd\x6a\x4b\x23\xda\x6b\x6d\x60\x98\xe1\x38\x26\xb4\x31\x3a\x12\xaf\x6d\xef\xe1\xf6\xf4\x13\x01\x9a\x18\x36\xc3\x35\x3e\x8b\xa4\x92\xff\x3b\xc1\xcc\xe8\x1d\xcd\xd1\xee\x41\x1b\x5f\x14\x4a\xfe\x70\x3f\x5a\x5e\xab\xe4\x1d\xe9\xf5\xe7\x5d\xe9\xdb\x4f\xa9\x4a\xbb\xbc\x75\x67\x49\x60\x03\x59\x9f\x93\x64\x67\x5b\x4b\x2b\xa1\xf6\x98\xe6\xb6\x9c\x3d\xb6\x96\x9d\xf5\x10\x2b\xf6\x21\xbe\x63\x26\x83\x0a\x7b\x0f\xe2\xcd\x52\xeb\x73\xef\x15\x9b\x51\x63\x37\xbb\x32\xca\x95\x36\x84\x34\x80\xf7\x85\xd4\x98\x82\x9c\xa1\x82\xf3\xf7\x97\x24\xfe\xf7\x5f\x3f\xfd\xad\x6d\x97\xfd\x98\x91\x6b\x04\x8b\xfe\x0a\x93\x52\x59\x7f\xde\x42\x5f\xf1\x48\x57\xde\x4e\x0d\x93\xc2\x22\xff\xf3\xdf\xff\xf5\xcf\x4f\x8e\xf8\x1f\x38\x5c\xa7\x74\x53\x03\x5f\x70\x14\x30\xba\x50\x52\x3c\x85\xd3\x03\x30\xb0\xf6\xcd\x36\x9f\x4d\x3c\x53\x24\xfe\xf1\xd3\x3f\x8e\xc1\xdf\xbe\xe7\x51\xd8\xa3\xdd\x28\xfb\x7a\xcb\xc4\x74\x39\xa9\xb8\x84\x7c\x12\x7c\x05\x36\x7c\x04\x79\x69\x30\x25\xf1\x85\x14\x37\x6c\x5a\xaa\x6a\x63\xa3\x30\xfb\xba\x07\xe1\xae\x7d\xd7\x21\xa8\x3f\x9c\xa6\xbc\xdb\xd3\xba\x45\x0c\x2a\xfd\x57\x56\xbe\xb6\xb1\xc3\xbb\x9f\x9a\x96\xcf\x06\x3a\x0f\x7e\x4e\xe2\x15\x78\x14\xa6\x66\x3f\xd1\x1a\x43\xba\x83\xe1\x57\x24\x8e\x26\xf1\xdc\xe6\xa3\x49\x1c\xb1\x18\x02\xe8\x32\xef\x28\x64\x71\x14\xa6\xe9\x61\xb9\xac\x71\x0f\x95\xe5\xfc\xfd\x25\xa0\x48\x0b\xc9\x84\x79\x84\x40\x07\xa1\x2a\xc8\x44\xa6\xe8\xb6\xb4\x16\xed\x64\xf4\x0d\xd5\xf8\xdd\x87\x37\xcb\x65\x48\x0b\x16\x6e\x47\xa9\xd0\x8d\x68\xe8\x46\xd5\x71\xab\x0f\xfa\x79\xe7\x2e\xbf\x95\xa9\x83\xb9\x74\xee\x6c\x23\xb3\x45\x61\x33\xd0\x21\x2e\x3b\xe9\x5f\x48\x91\x94\x4a\xa1\x48\xe6\x8f\x64\xe3\xa3\x54\xb7\xa8\xf4\x60\x4e\xce\x8d\xc1\xbc\xb0\xe9\xf9\x51\x6c\x34\x68\x06\xf3\x71\x29\x0c\xaa\x19\xe5\x8f\xe4\xa3\x41\xe3\xc2\x47\x95\x01\xf0\x7b\xd8\xe8\x13\xc8\x84\x09\x32\xd0\x75\x9b\x9c\x70\xcd\x72\x94\xa5\x01\x7a\x63\x50\xc1\x5d\xc6\x92\x0c\x0a\x25\x13\xd4\x1a\xee\x18\xe7\x30\x41\xd0\x28\x0c\x89\x57\x2b\x3f\xb7\x9b\xb7\x53\xfe\x68\x45\xd3\x41\xc6\x0d\xf8\xc8\x71\x75\x9d\xd6\x3d\x50\xff\xf8\xa7\xbf\xb8\x22\x3e\xe8\xe7\xe0\x14\x33\x60\x80\xf2\xae\x2e\x5f\x5d\xbe\xbb\xde\xd1\xdd\x2b\x45\x13\xbc\x29\x39\x98\x1a\xc2\x85\xb7\x9f\x4e\xcb\x0d\x77\xff\xe7\xda\x76\xc1\xd4\x9d\x1f\xe8\x3d\x28\xfc\xbe\x44\x6d\x40\xb3\x1f\x86\xe6\x8a\x83\x22\x6c\x29\xed\x2d\xbd\xff\x50\xd3\x74\xd6\x80\x8b\xae\xbc\xf4\xe4\xa2\x23\xa7\x5d\x1d\x96\x05\x6c\x36\x63\x62\x0a\x29\x53\x98\x18\xa9\x86\x66\x47\xbf\x8d\xb7\x54\x5f\x30\xe5\xb8\x45\x91\x2e\x8b\x58\x1b\x6a\x58\x12\x85\xf6\xbb\x23\x94\x3d\x36\x68\x33\xb7\x51\xc6\x96\x94\x37\x5c\xde\x05\xf7\xcf\xed\x29\x47\xfe\x1a\xee\xa4\x3d\x3f\x2a\xa4\xb7\xcf\xa1\xfa\x08\x28\xe7\x55\x5a\xdb\x3e\xe9\xef\x97\xc9\x43\xd1\x11\x8b\xd3\xb9\xa0\xb9\x15\xa2\xa3\x65\xd1\x81\xfb\x08\x3a\xaf\x32\xae\x54\xf0\x45\x47\xd6\x7d\xfa\xe0\xd7\x64\xca\xc8\xd3\xa1\x75\xf4\x85\xcc\x73\x2a\xd2\xc7\x9c\x09\x0a\x85\x7d\x0a\xdb\x14\x1c\x2b\x3a\x56\x4b\x85\x42\x87\x03\x42\x2f\xc7\x57\x19\x72\x87\xf2\xa7\x97\xdf\x86\xa3\x0a\x8f\x5b\xfd\xb3\x5f\xa7\x51\x98\xf2\xbe\x36\xd7\x56\xbb\x6a\x1b\x69\xcb\xb1\x5e\x8a\x19\x53\x52\xe4\x28\xf6\x85\x34\xf7\x83\x6b\x0b\x5f\xff\xb1\x15\x06\x1c\x5d\x77\x61\x0c\x9d\x70\x0c\x14\xea\x42\x0a\xcd\x66\xfb\x3a\x35\x6b\xf0\x0a\x66\x0b\x01\xd4\x68\x26\x52\xa5\xa8\xb8\xad\xff\xea\x1f\xb4\x51\xac\xc0\xae\x96\x52\x37\xe2\x4d\x97\xfe\xf0\x5a\xe5\x7e\x9e\x8b\x4c\x16\xdb\x93\x5b\x14\x9a\xcc\x0f\xea\xf7\x94\x97\x1e\x60\x51\xe8\xca\x96\xc5\xe9\x21\x6c\xfd\xe6\xc0\x65\xed\x62\xa1\xa8\x98\x22\x9c\xdc\x3e\x3b\x99\xc1\xf3\x31\xb8\x56\x39\xe0\xbb\xab\x35\x80\xa3\x08\x5b\x40\x36\x7e\x2c\x16\x27\xb7\x4d\x2c\xf1\x23\x19\xfa\xd2\xb4\x4c\x2e\x16\x27\x33\x4b\xce\x07\xd6\x5d\x9b\xae\x85\xdc\x0a\xab\x9b\x36\xa3\xb0\x72\xa2\x03\xbe\xdc\x1f\xa0\x5c\x1e\x4f\x54\xd8\x17\xdd\xfa\x25\xaa\x92\x1b\x9c\xac\x82\x70\xd3\xd6\x3c\x42\xd4\x3b\x6f\xf7\x41\x8f\x1f\xf7\xb6\x22\xf6\x16\x2d\xa7\xdc\xeb\xd1\xf3\xdb\x50\x64\x37\x30\x7a\xfd\xf1\x7a\xf4\x52\x58\x5d\xfa\xb8\x62\x57\xe6\x7c\xfd\xf1\xda\x2d\x6f\x6e\xb0\x74\xe4\x4f\x26\xfc\xdc\xa7\x6a\x63\x2d\x16\x95\x1c\xaf\xd0\x7c\x8b\x34\x45\x65\x9d\xc9\xaf\xab\x66\xaf\xac\x82\xf5\xf0\x40\x97\x22\x03\x3c\x3d\xb0\xd6\xca\xef\x4a\x54\xf3\x6b\x79\x8b\xe2\x48\xca\xa9\x10\x82\xb1\x18\x8f\xa0\x24\x3f\x15\xa5\x68\x28\xe3\x7a\x40\x2c\xd6\x65\x9e\x53\xe5\x98\x5c\x76\x2f\x4f\x4b\x5a\x13\x6d\x2c\xaa\xa5\x83\x57\x68\xde\x53\x45\xf3\x61\x76\xd5\x5c\x85\x45\xe1\xbf\x09\xe1\xe0\x5d\x88\xca\x9e\xca\xf1\xd0\xd5\xe4\xe9\xf6\x1e\x54\x7f\xb5\x87\x1d\x3e\xe0\xa6\xeb\xa5\xac\x17\x82\x95\x66\x1e\xf6\xbf\x4f\xb6\x1a\xe0\xbf\x59\xff\xb0\x15\x47\xbb\x15\x3a\x5e\x1d\xee\x86\xab\x15\x7a\xdf\x38\xbb\x5c\x3e\xb1\x61\x9b\xa2\xaf\x72\xa3\x70\xed\x88\xff\x15\x31\xae\x0e\xd5\xc7\x0c\x72\x35\xc6\xa3\x45\xb9\xa1\xa9\xa8\x2d\xd8\xff\x4e\x4a\xfa\x86\x6a\x96\x1c\x49\x51\x15\xae\x23\x68\x68\xb1\x58\xb1\x55\x4d\x63\x68\xf8\x23\xfc\x41\x32\x01\xe4\x19\x10\x97\xa3\xf7\x46\x40\xe7\x56\xe7\x01\x9f\x73\x38\xcc\xf7\x1f\xd9\xbb\x41\x3b\x40\x76\xe7\x54\x36\xb7\xad\xaf\x4d\x41\x79\xa1\xa4\x78\x29\x8c\x62\xd8\x0e\xde\xdb\xc5\x75\xff\x78\xc6\xee\xd3\x87\x23\x1a\xd5\x8a\x1b\xa9\x72\xc8\xd1\x64\x32\x1d\x93\x42\xea\xbe\x6a\xd7\x61\x9e\xa3\x6f\xe9\xbe\xb9\x8e\x35\x4c\xf7\x7c\xc7\xd5\x66\xd4\xa9\x6f\x58\xa3\x97\xaa\x43\xe9\xbe\x0b\x37\xa0\x6d\x01\x9f\xb3\x75\x01\x9e\xed\x0b\x18\x76\xd8\x1e\xd2\xc6\x68\x20\xaf\x0a\x4c\x3c\x1b\x20\xce\xe7\x5f\xf0\xed\x68\x80\x67\x57\x03\xda\x9d\x0d\x26\x52\xbc\x7f\x06\x27\x28\x8c\x9a\xfb\xb6\x38\x60\xc8\xce\xc3\xd0\x56\x47\x05\xd8\x8c\x90\x55\xc3\x81\x8b\x45\xcd\xff\x72\x69\x63\x6b\x2d\xc3\xc8\xea\x66\xf4\x86\x4e\x90\xc3\x17\x85\x62\xc2\x00\xf9\x19\x59\x09\xfa\xd4\x86\xd9\x9e\x29\xbc\xbd\x64\xbd\xfb\x24\xf0\x28\x29\x9b\xca\xb1\x25\x91\xfd\x33\xbc\xf0\x1b\xd0\xe8\xf1\x32\x58\xdf\xb2\xd0\xb9\x71\x03\xae\xcd\x1b\x38\xdc\xa1\x69\x2d\x19\x92\xf1\x7a\x1e\x45\xa1\xcd\x26\xae\x19\xaf\xbd\x51\x9b\xa4\x36\x78\xde\xd0\x25\x91\x39\x26\x31\xdf\x04\xd6\x93\xbc\xae\xd5\x7c\x7f\xda\x1a\xd4\x65\xb7\x6b\xa8\xc2\xf5\xe8\xad\x95\x3b\x48\xa4\x30\x4a\x72\xb2\x9a\x32\xaf\xf8\x85\x82\xd3\x04\x33\xc9\x53\x54\x63\xd2\xbc\x8d\x2d\xe8\x9c\x4b\x9a\x92\x38\x0a\x1b\x4c\x9f\xa1\xcf\x57\x3f\x2d\x8d\x91\xeb\x31\xdc\x89\x11\x30\x31\x22\x28\x14\xb3\x67\x62\x02\x66\x5e\xe0\x98\xe8\x72\x92\x33\x43\x62\x8d\x22\x8d\xc2\x1a\xc4\xd3\xe8\x3a\xaa\xac\x6d\x3b\xec\x2e\xb3\x8e\x60\x73\x3f\xc9\x8c\xeb\x1b\xaa\x0d\x9c\x9d\x36\xef\xd3\xf7\x94\x42\xfe\x03\x87\x83\x4b\x9f\xcf\x52\xf2\xb8\x96\x3a\xce\x89\xd6\x16\x28\x97\x2f\x3c\x5e\xb4\x98\xac\x1a\x2a\xf2\x83\xb8\x90\x79\xc1\xd1\x78\x42\x6d\x06\xc7\x5c\xa0\xdc\x72\x90\x73\xb1\xe4\x5a\x24\xad\x8b\xa3\xd1\xb7\x4c\x1b\xa9\xe6\x70\xe6\x32\xe3\x0b\xfe\xaf\xd2\x7c\x73\x72\x53\xfd\xac\xbc\x22\x5c\x2c\x46\x97\x2f\x96\xcb\xb0\x3a\x5a\xda\x6f\x5e\xd5\x8d\xe7\x1b\x9c\xea\xcd\xcf\xe8\x2d\x1a\x3a\xba\x50\x48\x0d\xa6\xe7\x66\xf4\x5b\xa9\x72\x6a\x80\x9c\x7e\x05\xaf\xa9\x80\xd3\xaf\xe1\xcb\xb3\xe7\xa7\xbf\x78\x7e\x7a\x36\x3a\x3d\x3d\x85\xb7\x57\xd7\xc4\xfb\x55\x91\xef\xb6\xd4\x07\xfe\x9a\xb1\x95\x55\x0e\xe8\x50\xad\x65\x5b\xa1\x70\x15\xce\x93\x55\xcf\xf1\xa7\xe6\x62\x02\x0a\x25\xa7\x0a\xb5\xf6\x25\xe8\x5b\x98\x79\xdb\x44\x35\x0b\x5f\xed\x5d\x7b\xa0\xd3\x15\x8f\x9b\x93\xbb\xf7\x3c\x1c\x9c\xfc\x60\x41\x39\xa4\x0a\xf4\x6f\x7b\x34\x1f\x9c\x89\x5b\x50\xc8\xc7\xa4\x1a\x1c\xd1\x19\xa2\x79\xf0\x3f\x45\xf5\xec\x10\x01\x92\x68\x4d\x80\x4c\xa4\x34\xda\x28\x5a\x04\x39\x35\xa8\x18\xe5\x41\x8a\x9a\x4d\xc5\x28\x67\x62\x64\xd7\xd8\x43\xd1\x93\x27\x51\xb8\xfa\x47\xb9\x30\x33\x39\x8f\xff\x13\x00\x00\xff\xff\xc5\x67\x61\xa5\xcd\x37\x00\x00") func unitInfoHtmlBytes() ([]byte, error) { return bindataRead(