PageSourceSearch

https://app.datasert.com/assets/Jobs-f6Im2R4L.js

js datasert.com collected 2026-09-24 14:42:02 UTC 17,469 bytes, 182 lines download raw bytes

1import { Q as QBreadcrumbsEl } from "./QBreadcrumbsEl-DJmFSikN.js";
2import { B as getCICDJobs, C as deleteCICDJobs } from "./api-EaByEhnn.js";
3import { G as GridSelect } from "./GridSelect-CjyiI6pi.js";
4import { z as deepClone, v as valueLabels, y as confirmDelete, h as notifySuccess, C as hasRole } from "./utils-Dl9t6EOZ.js";
5import { d as distExports } from "./realsyncUtils-B_eb3OgH.js";
6import { m as mixinsV3 } from "./mixinsV3-DJOx874v.js";
7import { E as EnvRef } from "./EnvRef-DLnnFTas.js";
8import { q as defineComponent, s as ref, x as watch, l as computed, _ as _export_sfc, c as createBlock, o as openBlock, w as withCtx, a as createVNode, r as resolveComponent } from "./index-l2g1tnsc.js";
9import "./http-QV44vcaW.js";
10import "./api-CsX1TBBI.js";
11import "./lodash-D-1jTqv6.js";
12import "./RecordRef-71_FjUo4.js";
13import "./RecordLink-BhuEBSlE.js";
14import "./RouteLink-CCU5m11L.js";
15const _sfc_main = /* @__PURE__ */ defineComponent({
16  __name: "Jobs",
17  props: {
18    envId: {},
19    allJobsMode: { type: Boolean }
20  },
21  setup(__props, { expose: __expose }) {
22    __expose();
23    const props = __props;
24    const { message, processing, initing, messageType, processForm } = mixinsV3();
25    const columns = [
26      { value: "name" },
27      { value: "status" },
28      { value: "runStartAt", label: "Last Run Start At", type: "datetime" },
29      { value: "runEndAt", label: "Last Run End At", type: "datetime" }
30    ];
31    const records = getRecords;
32    const progressOpen = ref(false);
33    const initingSuccess = ref(true);
34    const filterReq = ref({ status: "" });
35    const filteredJobs = ref([]);
36    const init = ref(false);
37    const status = ref("");
38    const jobs = ref([]);
39    const loading = ref(false);
40    const grid = ref();
41    function hasRole$1() {
42      return computed(() => hasRole([distExports.access.ROLE_MS_ADMIN, distExports.access.ROLE_TENANT_ADMIN, distExports.access.ROLE_MS_USER]));
43    }
44    watch(
45      () => filterReq.value.status,
46      () => {
47        filter();
48      }
49    );
50    function getStatusOptions() {
51      return [
52        { id: "queued", name: "Queued" },
53        { id: "processing", name: "Processing" },
54        { id: "completed", name: "Completed" },
55        { id: "error", name: "Error" },
56        { id: "aborted", name: "Aborted" }
57      ];
58    }
59    async function getRecords() {
60      if (!init.value) {
61        init.value = true;
62        await getJobs();
63      }
64      updateStatus();
65      return deepClone(filteredJobs);
66    }
67    async function getJobs(force = false) {
68      loading.value = true;
69      filteredJobs.value = jobs.value = await getCICDJobs() || [];
70      filter();
71      updateStatus();
72      loading.value = false;
73      force ? refresh() : void 0;
74    }
75    function refresh() {
76      grid.value.refresh();
77    }
78    function updateStatus() {
79      status.value = `Filter [Status: ${filterReq.value.status ? valueLabels.status[filterReq.value.status] : "All"}]`;
80    }
81    function filter() {
82      const filteredJobs2 = deepClone(jobs.value).filter((job) => {
83        if (filterReq.value.status === "") {
84          return true;
85        } else {
86          return job.runStatus === filterReq.value.status;
87        }
88      }) || [];
89      setFilteredJobs(filteredJobs2 || []);
90      refresh();
91    }
92    function setFilteredJobs(jobs2) {
93      filteredJobs.value = jobs2;
94    }
95    async function handleDelete(sels) {
96      const list = sels.map((rec) => `<li>${rec.name}</li>`).join("");
97      const msg = `Are you sure you want to delete following Jobs? <br/><ul> ${list} </ul>`;
98      const result = await confirmDelete("Delete Job?", msg);
99      if (result) {
100        deleteJob(sels);
101      }
102    }
103    function deleteJob(sels, val) {
104      const payload = sels.map((sel) => ({
105        id: sel.id
106      }));
107      processing.value = true;
108      processForm(async () => {
109        await deleteCICDJobs({
110          records: payload
111        });
112        notifySuccess("Jobs have been deleted");
113        await getJobs(true);
114      });
115    }
116    const __returned__ = { props, message, processing, initing, messageType, processForm, columns, records, progressOpen, initingSuccess, filterReq, filteredJobs, init, status, jobs, loading, grid, hasRole: hasRole$1, getStatusOptions, getRecords, getJobs, refresh, updateStatus, filter, setFilteredJobs, handleDelete, deleteJob, GridSelect, EnvRef };
117    Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
118    return __returned__;
119  }
120});
121function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
122  const _component_Table = resolveComponent("Table");
123  const _component_Page = resolveComponent("Page");
124  return openBlock(), createBlock(_component_Page, {
125    title: "CI/CD Jobs",
126    initing: $setup.initing,
127    initingSuccess: $setup.initingSuccess,
128    processing: $setup.processing,
129    message: $setup.message,
130    messageType: $setup.messageType
131  }, {
132    breadcrumbs: withCtx(() => [
133      createVNode(QBreadcrumbsEl, {
134        label: "Home",
135        to: "/metasync/home"
136      })
137    ]),
138    default: withCtx(() => [
139      createVNode(_component_Table, {
140        recordType: "Job",
141        recordTypePlural: "Jobs",
142        ref: "grid",
143        nameLinkPrefix: "/metasync/cicd",
144        columns: $setup.columns,
145        initing: $setup.initing,
146        records: $setup.records,
147        editable: false,
148        creatable: false,
149        onDelete: $setup.handleDelete,
150        audit: "",
151        status: $setup.status,
152        refreshable: false,
153        customRefresh: true,
154        onCustomRefresh: _cache[1] || (_cache[1] = ($event) => $setup.getJobs(true))
155      }, {
156        "toolbar-actions": withCtx(() => [
157          createVNode($setup["GridSelect"], {
158            modelValue: $setup.filterReq.status,
159            "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.filterReq.status = $event),
160            options: $setup.getStatusOptions(),
161            showDefault: "",
162            defaultLabel: "-Status-",
163            defaultValue: ""
164          }, null, 8, ["modelValue", "options"])
165        ]),
166        field1: withCtx((row) => [
167          createVNode($setup["EnvRef"], {
168            model: row,
169            field: "envId"
170          }, null, 8, ["model"])
171        ]),
172        _: 1
173      }, 8, ["initing", "records", "status"])
174    ]),
175    _: 1
176  }, 8, ["initing", "initingSuccess", "processing", "message", "messageType"]);
177}
178const Jobs = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "Jobs.vue"]]);
179export {
180  Jobs as default
181};
182//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSm9icy1mNkltMlI0TC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb2R1Y3RzL21ldGFzeW5jL3BhZ2VzL2NpY2QvSm9icy52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8UGFnZSB0aXRsZT1cIkNJL0NEIEpvYnNcIiA6aW5pdGluZz1cImluaXRpbmdcIiA6aW5pdGluZ1N1Y2Nlc3M9XCJpbml0aW5nU3VjY2Vzc1wiIDpwcm9jZXNzaW5nPVwicHJvY2Vzc2luZ1wiIDptZXNzYWdlPVwibWVzc2FnZVwiIDptZXNzYWdlVHlwZT1cIm1lc3NhZ2VUeXBlXCI+XG4gICAgPHRlbXBsYXRlIHYtc2xvdDpicmVhZGNydW1icz5cbiAgICAgIDxxLWJyZWFkY3J1bWJzLWVsIGxhYmVsPVwiSG9tZVwiIHRvPVwiL21ldGFzeW5jL2hvbWVcIiAvPlxuICAgIDwvdGVtcGxhdGU+XG4gICAgPFRhYmxlXG4gICAgICByZWNvcmRUeXBlPVwiSm9iXCJcbiAgICAgIHJlY29yZFR5cGVQbHVyYWw9XCJKb2JzXCJcbiAgICAgIHJlZj1cImdyaWRcIlxuICAgICAgbmFtZUxpbmtQcmVmaXg9XCIvbWV0YXN5bmMvY2ljZFwiXG4gICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgOmluaXRpbmc9XCJpbml0aW5nXCJcbiAgICAgIDpyZWNvcmRzPVwicmVjb3Jkc1wiXG4gICAgICA6ZWRpdGFibGU9XCJmYWxzZVwiXG4gICAgICA6Y3JlYXRhYmxlPVwiZmFsc2VcIlxuICAgICAgQGRlbGV0ZT1cImhhbmRsZURlbGV0ZVwiXG4gICAgICBhdWRpdFxuICAgICAgOnN0YXR1cz1cInN0YXR1c1wiXG4gICAgICA6cmVmcmVzaGFibGU9XCJmYWxzZVwiXG4gICAgICA6Y3VzdG9tUmVmcmVzaD1cInRydWVcIlxuICAgICAgQGN1c3RvbVJlZnJlc2g9XCJnZXRKb2JzKHRydWUpXCJcbiAgICA+XG4gICAgICA8dGVtcGxhdGUgdi1zbG90OnRvb2xiYXItYWN0aW9ucz5cbiAgICAgICAgPCEtLSAgICAgICAgPEljb24gQGNsaWNrPVwib3BlbkpvYnNGaWx0ZXJEaWFsb2dcIiBuYW1lPVwiZmlsdGVyXCIgY2xpY2thYmxlIHRvb2x0aXA9XCJGaWx0ZXIgSm9icyBieSBzcGVjaWZpZWQgY3JpdGVyaWFcIiAvPi0tPlxuXG4gICAgICAgIDxHcmlkU2VsZWN0IHYtbW9kZWw9XCJmaWx0ZXJSZXEuc3RhdHVzXCIgOm9wdGlvbnM9XCJnZXRTdGF0dXNPcHRpb25zKClcIiBzaG93RGVmYXVsdCBkZWZhdWx0TGFiZWw9XCItU3RhdHVzLVwiIGRlZmF1bHRWYWx1ZT1cIlwiIC8+XG4gICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICA8dGVtcGxhdGUgdi1zbG90OmZpZWxkMT1cInJvd1wiPlxuICAgICAgICA8RW52UmVmIDptb2RlbD1cInJvd1wiIGZpZWxkPVwiZW52SWRcIiAvPlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L1RhYmxlPlxuICA8L1BhZ2U+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxuaW1wb3J0ICogYXMgYXBpIGZyb20gJ3NyYy9wcm9k
182dWN0cy9tZXRhc3luYy9zZXJ2aWNlcy9hcGknO1xuaW1wb3J0IEdyaWRTZWxlY3QgZnJvbSAnc3JjL2NvbXBvbmVudHMvR3JpZFNlbGVjdC52dWUnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnc3JjL3NlcnZpY2VzL3V0aWxzJztcbmltcG9ydCB7YWNjZXNzfSBmcm9tICdAZGF0YXNlcnQvanMtdXRpbHMnO1xuaW1wb3J0IHtkZWVwQ2xvbmUsIERJQUxPR19NT0RFX0FERH0gZnJvbSAnc3JjL3NlcnZpY2VzL3V0aWxzJztcbmltcG9ydCB7Y29tcHV0ZWQsIG9uQmVmb3JlTW91bnQsIHJlZiwgd2F0Y2h9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgbWl4aW5zVjMgZnJvbSAnc3JjL21peGlucy9taXhpbnNWMyc7XG5pbXBvcnQge0NJQ0RKb2IsIERlcGxveW1lbnR9IGZyb20gJ0BkYXRhc2VydC9qcy11dGlscy9kaXN0L21vZGVsc01zJztcbmltcG9ydCBFbnZSZWYgZnJvbSAnc3JjL2NvbXBvbmVudHMvRW52UmVmLnZ1ZSc7XG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGVudklkPzogc3RyaW5nO1xuICBhbGxKb2JzTW9kZTogYm9vbGVhbjtcbn1cbmNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7fSk7XG5cbmNvbnN0IHttZXNzYWdlLCBwcm9jZXNzaW5nLCBpbml0aW5nLCBtZXNzYWdlVHlwZSwgcHJvY2Vzc0Zvcm19ID0gbWl4aW5zVjMoKTtcblxuY29uc3QgY29sdW1ucyA9IFtcbiAge3ZhbHVlOiAnbmFtZSd9LFxuICB7dmFsdWU6ICdzdGF0dXMnfSxcbiAge3ZhbHVlOiAncnVuU3RhcnRBdCcsIGxhYmVsOiAnTGFzdCBSdW4gU3RhcnQgQXQnLCB0eXBlOiAnZGF0ZXRpbWUnfSxcbiAge3ZhbHVlOiAncnVuRW5kQXQnLCBsYWJlbDogJ0xhc3QgUnVuIEVuZCBBdCcsIHR5cGU6ICdkYXRldGltZSd9LFxuXTtcbmNvbnN0IHJlY29yZHMgPSBnZXRSZWNvcmRzO1xuY29uc3QgcHJvZ3Jlc3NPcGVuID0gcmVmKGZhbHNlKTtcbmNvbnN0IGluaXRpbmdTdWNjZXNzID0gcmVmKHRydWUpO1xuY29uc3QgZmlsdGVyUmVxID0gcmVmKHtzdGF0dXM6ICcnfSk7XG5jb25zdCBmaWx0ZXJlZEpvYnMgPSByZWYoW10gYXMgQ0lDREpvYltdKTtcbmNvbnN0IGluaXQgPSByZWYoZmFsc2UpO1xuY29uc3Qgc3RhdHVzID0gcmVmKCcnKTtcbmNvbnN0IGpvYnMgPSByZWYoW10gYXMgQ0lDREpvYltdKTtcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpO1xuY29uc3QgZ3JpZCA9IHJlZigpO1xuZnVuY3Rpb24gaGFzUm9sZSgpIHtcbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHV0aWxzLmhhc1JvbGUoW2FjY2Vzcy5ST0xFX01TX0FETUlOLCBhY2Nlc3MuUk9MRV9URU5BTlRfQURNSU4sIGFjY2Vzcy5ST0xFX01TX1VTRVJdKSk7XG59XG5cbndhdGNoKFxuICAoKSA9PiBmaWx0ZXJSZXEudmFsdWUuc3RhdHVzLFxuICAoKSA9PiB7XG4gICAgZmlsdGVyKCk7XG4gIH1cbik7XG5cbmZ1bmN0aW9uIGdldFN0YXR1c09wdGlvbnMoKSB7XG4gIHJldHVybiBbXG4gICAge2lkOiAncXVldWVkJywgbmFtZTogJ1F1ZXVlZCd9LF
182xuICAgIHtpZDogJ3Byb2Nlc3NpbmcnLCBuYW1lOiAnUHJvY2Vzc2luZyd9LFxuICAgIHtpZDogJ2NvbXBsZXRlZCcsIG5hbWU6ICdDb21wbGV0ZWQnfSxcbiAgICB7aWQ6ICdlcnJvcicsIG5hbWU6ICdFcnJvcid9LFxuICAgIHtpZDogJ2Fib3J0ZWQnLCBuYW1lOiAnQWJvcnRlZCd9LFxuICBdO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVjb3JkcygpIHtcbiAgaWYgKCFpbml0LnZhbHVlKSB7XG4gICAgaW5pdC52YWx1ZSA9IHRydWU7XG4gICAgYXdhaXQgZ2V0Sm9icygpO1xuICB9XG4gIHVwZGF0ZVN0YXR1cygpO1xuICByZXR1cm4gZGVlcENsb25lKGZpbHRlcmVkSm9icyk7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRKb2JzKGZvcmNlID0gZmFsc2UpIHtcbiAgbG9hZGluZy52YWx1ZSA9IHRydWU7XG4gIGZpbHRlcmVkSm9icy52YWx1ZSA9IGpvYnMudmFsdWUgPSAoYXdhaXQgYXBpLmdldENJQ0RKb2JzKCkpIHx8IFtdO1xuXG4gIGZpbHRlcigpO1xuICB1cGRhdGVTdGF0dXMoKTtcbiAgbG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICBmb3JjZSA/IHJlZnJlc2goKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVmcmVzaCgpIHtcbiAgZ3JpZC52YWx1ZS5yZWZyZXNoKCk7XG59XG5mdW5jdGlvbiB1cGRhdGVTdGF0dXMoKSB7XG4gIHN0YXR1cy52YWx1ZSA9IGBGaWx0ZXIgW1N0YXR1czogJHtmaWx0ZXJSZXEudmFsdWUuc3RhdHVzID8gdXRpbHMudmFsdWVMYWJlbHMuc3RhdHVzW2ZpbHRlclJlcS52YWx1ZS5zdGF0dXNdIDogJ0FsbCd9XWA7XG59XG5cbmZ1bmN0aW9uIGZpbHRlcigpIHtcbiAgY29uc3QgZmlsdGVyZWRKb2JzID1cbiAgICBkZWVwQ2xvbmUoam9icy52YWx1ZSkuZmlsdGVyKChqb2IpID0+IHtcbiAgICAgIGlmIChmaWx0ZXJSZXEudmFsdWUuc3RhdHVzID09PSAnJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBqb2IucnVuU3Rh
182dHVzID09PSBmaWx0ZXJSZXEudmFsdWUuc3RhdHVzO1xuICAgICAgfVxuICAgIH0pIHx8IChbXSBhcyBDSUNESm9iW10pO1xuICBzZXRGaWx0ZXJlZEpvYnMoZmlsdGVyZWRKb2JzIHx8IFtdKTtcblxuICByZWZyZXNoKCk7XG59XG5mdW5jdGlvbiBzZXRGaWx0ZXJlZEpvYnMoam9iczogQ0lDREpvYltdKSB7XG4gIGZpbHRlcmVkSm9icy52YWx1ZSA9IGpvYnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZURlbGV0ZShzZWxzOiBDSUNESm9iW10pIHtcbiAgY29uc3QgbGlzdCA9IHNlbHMubWFwKChyZWMpID0+IGA8bGk+JHtyZWMubmFtZX08L2xpPmApLmpvaW4oJycpO1xuICBjb25zdCBtc2cgPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBmb2xsb3dpbmcgSm9icz8gPGJyLz4nICsgYDx1bD4gJHtsaXN0fSA8L3VsPmA7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHV0aWxzLmNvbmZpcm1EZWxldGUoJ0RlbGV0ZSBKb2I/JywgbXNnKTtcblxuICBpZiAocmVzdWx0KSB7XG4gICAgZGVsZXRlSm9iKHNlbHMsICdkZWxldGVkJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVsZXRlSm9iKHNlbHM6IENJQ0RKb2JbXSwgdmFsOiBzdHJpbmcpIHtcbiAgY29uc3QgcGF5bG9hZCA9IHNlbHMubWFwKChzZWwpID0+ICh7XG4gICAgaWQ6IHNlbC5pZCxcbiAgfSkpO1xuICBwcm9jZXNzaW5nLnZhbHVlID0gdHJ1ZTtcbiAgcHJvY2Vzc0Zvcm0oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGFwaS5kZWxldGVDSUNESm9icyh7XG4gICAgICByZWNvcmRzOiBwYXlsb2FkLFxuICAgIH0pO1xuICAgIHV0aWxzLm5vdGlmeVN1Y2Nlc3MoJ0pvYnMgaGF2ZSBiZWVuIGRlbGV0ZWQnKTtcbiAgICBhd2FpdCBnZXRKb2JzKHRydWUpO1xuICB9KTtcbn1cbjwvc2NyaXB0PlxuIl0sIm5hbWVzIjpbImhhc1JvbGUiLCJ1dGlscy5oYXNSb2xlIiwiYWNjZXNzIiwiYXBpLmdldENJQ0RKb2JzIiwidXRpbHMudmFsdWVMYWJlbHMiLCJmaWx0ZXJlZEpvYnMiLCJqb2JzIiwidXRpbHMuY29uZmlybURlbGV0ZSIsImFwaS5kZWxldGVDSUNESm9icyIsInV0aWxzLm5vdGlmeVN1Y2Nlc3MiLCJfY3JlYXRlQmxvY2siLCJfd2l0aEN0eCIsIl9jcmVhdGVWTm9kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtEQSxVQUFNLFFBQVE7QUFFZCxVQUFNLEVBQUMsU0FBUyxZQUFZLFNBQVMsYUFBYSxZQUFBLElBQWUsU0FBQTtBQUVqRSxVQUFNLFVBQVU7QUFBQSxNQUNkLEVBQUMsT0FBTyxPQUFBO0FBQUEsTUFDUixFQUFDLE9BQU8sU0FBQTtBQUFBLE1BQ1IsRUFBQyxPQUFPLGNBQWMsT0FBTyxxQkFBcUIsTUFBTSxXQUFBO0FBQUEsTUFDeEQsRUFBQyxPQUFPLFlBQVksT0FBTyxtQkFBbUIsTUFBTSxXQUFBO0FBQUEsSUFBVTtBQUVoRSxVQUFNLFVBQVU7QUFDaEIsVUFBTSxlQUFlLElBQUksS0FBSztBQUM5QixVQUFNLGlCQUFpQixJQUFJLElBQUk7QUFDL0IsVUFBTSxZQUFZLElBQUksRUFBQyxRQUFRLElBQUc7QUFDbEMsVUFBTSxlQUFlLElBQUksRUFBZTtBQUN4QyxVQUFNLE9BQU8sSUFBSSxLQUFLO0FBQ3RCLFVBQU0sU0FBUyxJQUFJLEVBQUU7QUFDckIsVUFBTSxPQUFPLElBQUksRUFBZTtBQUNoQyxVQUFNLFVBQVUsSUFBSSxLQUFLO0FBQ3pCLFVBQU0sT0FBTyxJQUFBO0FBQ2IsYUFBU0EsWUFBVTtBQUNqQixhQUFPLFNBQVMsTUFBTUMsUUFBYyxDQUFDQyxtQkFBTyxlQUFlQSxZQUFBQSxPQUFPLG1CQUFtQkEsWUFBQUEsT0FBTyxZQUFZLENBQUMsQ0FBQztBQUFBLElBQzVHO0FBRUE7QUFBQSxNQUNFLE1BQU0sVUFBVSxNQUFNO0FBQUEsTUFDdEIsTUFBTTtBQUNKL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

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.