Merge pull request #2265 from KLayout/issue-2263

Following up on a number of Magic reader issues found in the course o…
This commit is contained in:
Matthias Köfferlein 2026-02-05 21:54:36 +01:00 committed by GitHub
commit f53c6b8543
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
124 changed files with 1589 additions and 44 deletions

View File

@ -35,6 +35,7 @@
#include "tlClassRegistry.h"
#include "tlFileUtils.h"
#include "tlUri.h"
#include "tlEnv.h"
#include <cctype>
#include <string>
@ -183,7 +184,7 @@ MAGReader::cell_from_path (const std::string &path, db::Layout &layout)
std::string cell_file;
if (! resolve_path (path, layout, cell_file)) {
// skip with a warning if the file can't be opened (TODO: better to raise an error?)
tl::warn << tl::to_string (tr ("Unable to find a layout file for cell - skipping this cell: ")) << path;
warn (tl::sprintf (tl::to_string (tr ("Unable to find a layout file for cell %s - skipping this file: %s")), cellname, path));
layout.cell (ci).set_ghost_cell (true);
} else {
m_cells_to_read.insert (std::make_pair (cellname, std::make_pair (cell_file, ci)));
@ -249,12 +250,49 @@ static bool find_and_normalize_file (const tl::URI &uri, std::string &path)
return false;
}
namespace
{
// TODO: this may be useful somewhere else
class EnvInterpolator
: public tl::Eval
{
public:
EnvInterpolator ()
: tl::Eval (0, 0, false) // safe mode
{
// .. nothing yet ..
}
void resolve_name (const std::string &name, const tl::EvalFunction *&function, const tl::Variant *&value, tl::Variant *&var)
{
tl::Eval::resolve_name (name, function, value, var);
if (! value && ! function && ! var) {
auto i = m_values.find (name);
if (i != m_values.end ()) {
value = &i->second;
} else {
std::string v = tl::get_env (name);
tl::Variant *vv = &m_values[name];
*vv = v;
value = vv;
}
}
}
private:
std::map<std::string, tl::Variant> m_values;
};
}
bool
MAGReader::resolve_path (const std::string &path, const db::Layout & /*layout*/, std::string &real_path)
{
tl::Eval expr;
EnvInterpolator expr;
// the variables supported for evaluation are
// the variables supported for lib path evaluation are
// "tech_name": the name of the KLayout technology this file is loaded for (this may be the Magic technology name)
// "tech_dir": the path to KLayout's technology folder for "tech_name" or the default technology's folder path
// "magic_tech": the technology name from the Magic file currently read
@ -268,11 +306,20 @@ MAGReader::resolve_path (const std::string &path, const db::Layout & /*layout*/,
}
expr.set_var ("magic_tech", m_tech);
tl::URI path_uri (path);
tl::URI path_uri (expr.interpolate (path));
// absolute URIs are kept - we just try to figure out the suffix
if (tl::is_absolute (path_uri.path ())) {
return find_and_normalize_file (path_uri, real_path);
if (! find_and_normalize_file (path_uri, real_path)) {
if (tl::verbosity () >= 20) {
tl::log << "Unable to locate file with expanded path: " << path_uri.to_string ();
}
return false;
} else {
return true;
}
}
tl::URI source_uri (mp_current_stream->source ());
@ -291,6 +338,10 @@ MAGReader::resolve_path (const std::string &path, const db::Layout & /*layout*/,
}
}
if (tl::verbosity () >= 20) {
tl::log << "Unable to locate file with expanded path: " << path_uri.to_string ();
}
return false;
}
@ -330,6 +381,7 @@ MAGReader::do_read_part (db::Layout &layout, db::cell_index_type cell_index, tl:
bool valid_layer = false;
unsigned int current_layer = 0;
bool in_labels = false;
double scale = m_lambda;
while (! stream.at_end ()) {
@ -359,6 +411,22 @@ MAGReader::do_read_part (db::Layout &layout, db::cell_index_type cell_index, tl:
ex.expect_end ();
} else if (ex.test ("magscale")) {
int n = 1, d = 1;
ex.read (n);
ex.read (d);
if (d <= 0) {
error (tl::to_string (tr ("'magscale' denominator must not be negative or zero")));
}
if (n <= 0) {
error (tl::to_string (tr ("'magscale' nominator must not be negative or zero")));
}
scale = m_lambda * double (n) / double (d);
ex.expect_end ();
} else if (ex.test ("timestamp")) {
size_t ts = 0;
@ -385,6 +453,10 @@ MAGReader::do_read_part (db::Layout &layout, db::cell_index_type cell_index, tl:
// ignore "checkpaint" internal layer
in_labels = false;
valid_layer = false;
} else if (lname == "properties") {
// ignore "properties" section as of now
in_labels = false;
valid_layer = false;
} else {
in_labels = false;
std::pair<bool, unsigned int> ll = open_layer (layout, lname);
@ -400,7 +472,7 @@ MAGReader::do_read_part (db::Layout &layout, db::cell_index_type cell_index, tl:
if (in_labels) {
error (tl::to_string (tr ("'rect' statement inside labels section")));
} else if (valid_layer) {
read_rect (ex, layout, cell_index, current_layer);
read_rect (ex, layout, cell_index, current_layer, scale);
}
} else if (ex.test ("tri")) {
@ -408,7 +480,7 @@ MAGReader::do_read_part (db::Layout &layout, db::cell_index_type cell_index, tl:
if (in_labels) {
error (tl::to_string (tr ("'rect' statement inside labels section")));
} else if (valid_layer) {
read_tri (ex, layout, cell_index, current_layer);
read_tri (ex, layout, cell_index, current_layer, scale);
}
} else if (ex.test ("rlabel")) {
@ -416,12 +488,12 @@ MAGReader::do_read_part (db::Layout &layout, db::cell_index_type cell_index, tl:
if (! in_labels) {
error (tl::to_string (tr ("'rlabel' statement outside labels section")));
} else {
read_rlabel (ex, layout, cell_index);
read_rlabel (ex, layout, cell_index, scale);
}
} else if (ex.test ("use")) {
read_cell_instance (ex, stream, layout, cell_index);
read_cell_instance (ex, stream, layout, cell_index, scale);
}
@ -467,7 +539,7 @@ MAGReader::do_merge_part (Layout &layout, cell_index_type cell_index)
}
void
MAGReader::read_rect (tl::Extractor &ex, Layout &layout, cell_index_type cell_index, unsigned int layer)
MAGReader::read_rect (tl::Extractor &ex, Layout &layout, cell_index_type cell_index, unsigned int layer, double scale)
{
double l, b, r, t;
ex.read (l);
@ -477,11 +549,11 @@ MAGReader::read_rect (tl::Extractor &ex, Layout &layout, cell_index_type cell_in
ex.expect_end ();
db::DBox box (l, b, r, t);
layout.cell (cell_index).shapes (layer).insert ((box * m_lambda).transformed (m_dbu_trans_inv));
layout.cell (cell_index).shapes (layer).insert ((box * scale).transformed (m_dbu_trans_inv));
}
void
MAGReader::read_tri (tl::Extractor &ex, Layout &layout, cell_index_type cell_index, unsigned int layer)
MAGReader::read_tri (tl::Extractor &ex, Layout &layout, cell_index_type cell_index, unsigned int layer, double scale)
{
double l, b, r, t;
ex.read (l);
@ -489,6 +561,8 @@ MAGReader::read_tri (tl::Extractor &ex, Layout &layout, cell_index_type cell_ind
ex.read (r);
ex.read (t);
// NOTE: that scheme is compatible with MAGIC's reader code (as of version 8.3) -
// we just skip unknown characters
bool s = false, e = false;
while (! ex.at_end ()) {
if (ex.test ("s")) {
@ -496,10 +570,9 @@ MAGReader::read_tri (tl::Extractor &ex, Layout &layout, cell_index_type cell_ind
} else if (ex.test ("e")) {
e = true;
} else {
break;
++ex;
}
}
ex.expect_end ();
std::vector<db::Point> pts;
@ -523,11 +596,11 @@ MAGReader::read_tri (tl::Extractor &ex, Layout &layout, cell_index_type cell_ind
db::SimplePolygon poly;
poly.assign_hull (pts.begin (), pts.end ());
layout.cell (cell_index).shapes (layer).insert ((poly * m_lambda).transformed (m_dbu_trans_inv));
layout.cell (cell_index).shapes (layer).insert ((poly * scale).transformed (m_dbu_trans_inv));
}
void
MAGReader::read_rlabel (tl::Extractor &ex, Layout &layout, cell_index_type cell_index)
MAGReader::read_rlabel (tl::Extractor &ex, Layout &layout, cell_index_type cell_index, double scale)
{
std::string lname;
ex.read (lname);
@ -573,13 +646,13 @@ MAGReader::read_rlabel (tl::Extractor &ex, Layout &layout, cell_index_type cell_
if (true || lname != "space") { // really? "space"? ignore it?
std::pair<bool, unsigned int> ll = open_layer (layout, lname);
if (ll.first) {
layout.cell (cell_index).shapes (ll.second).insert ((text * m_lambda).transformed (m_dbu_trans_inv));
layout.cell (cell_index).shapes (ll.second).insert ((text * scale).transformed (m_dbu_trans_inv));
}
}
}
void
MAGReader::read_cell_instance (tl::Extractor &ex, tl::TextInputStream &stream, Layout &layout, cell_index_type cell_index)
MAGReader::read_cell_instance (tl::Extractor &ex, tl::TextInputStream &stream, Layout &layout, cell_index_type cell_index, double scale)
{
const char *include_chars_in_files = "$_,.-$+#:;[]()<>|/\\";
@ -637,9 +710,9 @@ MAGReader::read_cell_instance (tl::Extractor &ex, tl::TextInputStream &stream, L
ex2.read (ysep);
na = (unsigned long) std::max (0, xhi - xlo + 1);
a = db::DVector (xsep, 0) * m_lambda;
a = db::DVector (xsep, 0) * scale;
nb = (unsigned long) std::max (0, yhi - ylo + 1);
b = db::DVector (0, ysep) * m_lambda;
b = db::DVector (0, ysep) * scale;
} else if (ex2.test ("timestamp")) {
// ignored
@ -655,7 +728,7 @@ MAGReader::read_cell_instance (tl::Extractor &ex, tl::TextInputStream &stream, L
ex2.read (m22);
ex2.read (dy);
trans = db::DCplxTrans (db::Matrix2d (m11, m12, m21, m22), db::DVector (dx, dy) * m_lambda);
trans = db::DCplxTrans (db::Matrix2d (m11, m12, m21, m22), db::DVector (dx, dy) * scale);
} else if (ex2.test ("box")) {
// ignored

View File

@ -153,10 +153,10 @@ private:
bool resolve_path(const std::string &path, const Layout &layout, std::string &real_path);
std::string cell_name_from_path (const std::string &path);
db::cell_index_type cell_from_path (const std::string &path, Layout &layout);
void read_rect (tl::Extractor &ex, Layout &layout, cell_index_type cell_index, unsigned int layer);
void read_tri (tl::Extractor &ex, Layout &layout, cell_index_type cell_index, unsigned int layer);
void read_rlabel (tl::Extractor &ex, Layout &layout, cell_index_type cell_index);
void read_cell_instance (tl::Extractor &ex, tl::TextInputStream &stream, Layout &layout, cell_index_type cell_index);
void read_rect (tl::Extractor &ex, Layout &layout, cell_index_type cell_index, unsigned int layer, double scale);
void read_tri (tl::Extractor &ex, Layout &layout, cell_index_type cell_index, unsigned int layer, double scale);
void read_rlabel (tl::Extractor &ex, Layout &layout, cell_index_type cell_index, double scale);
void read_cell_instance (tl::Extractor &ex, tl::TextInputStream &stream, Layout &layout, cell_index_type cell_index, double scale);
};
}

View File

@ -41,6 +41,12 @@ namespace db
// ---------------------------------------------------------------------------------
// MAGWriter implementation
// A function to produce a zero-area box instead of an empty one
static db::Box safe_box (const db::Box &bx)
{
return bx.empty () ? db::Box (0, 0, 0, 0) : bx;
}
MAGWriter::MAGWriter ()
: mp_stream (0),
m_progress (tl::to_string (tr ("Writing Magic file")), 10000)
@ -120,6 +126,8 @@ MAGWriter::filename_for_cell (db::cell_index_type ci, db::Layout &layout)
void
MAGWriter::write_dummy_top (const std::set<db::cell_index_type> &cell_set, const db::Layout &layout, tl::OutputStream &os)
{
m_cellname = "<TOP>";
os.set_as_text (true);
os << "magic\n";
@ -144,7 +152,7 @@ MAGWriter::write_dummy_top (const std::set<db::cell_index_type> &cell_set, const
cell_instances.reserve (cells_by_name.size ());
for (std::map<std::string, db::cell_index_type>::const_iterator c = cells_by_name.begin (); c != cells_by_name.end (); ++c) {
// instances are arrayed as stack
db::Box bx = layout.cell (c->second).bbox ();
db::Box bx = safe_box (layout.cell (c->second).bbox ());
cell_instances.push_back (db::CellInstArray (db::CellInst (c->second), db::Trans (db::Vector (0, y) + (db::Point () - bx.p1 ()))));
y += bx.height ();
w = std::max (w, db::Coord (bx.width ()));
@ -191,7 +199,7 @@ MAGWriter::do_write_cell (db::cell_index_type ci, const std::vector <std::pair <
db::Cell &cell = layout.cell (ci);
os << "<< checkpaint >>\n";
write_polygon (db::Polygon (cell.bbox ()), layout, os);
write_polygon (db::Polygon (safe_box (cell.bbox ())), layout, os);
bool any;
@ -292,18 +300,25 @@ namespace {
void
MAGWriter::write_polygon (const db::Polygon &poly, const db::Layout & /*layout*/, tl::OutputStream &os)
{
db::EdgeProcessor ep;
ep.insert (scaled (poly));
db::MergeOp op;
TrapezoidWriter writer (os);
db::TrapezoidGenerator tpgen (writer);
ep.process (tpgen, op);
if (poly.is_empty ()) {
// ignore empty polygons
} else if (poly.is_box ()) {
writer.put (db::SimplePolygon (scaled (poly.box ())));
} else {
db::EdgeProcessor ep;
ep.insert (scaled (poly));
db::MergeOp op;
db::TrapezoidGenerator tpgen (writer);
ep.process (tpgen, op);
}
}
void
MAGWriter::write_label (const std::string &layer, const db::Text &text, const db::Layout & /*layout*/, tl::OutputStream &os)
{
db::DVector v = db::DVector (text.trans ().disp ()) * m_sf;
db::Vector v = scaled (text.trans ().disp ());
std::string s = text.string ();
if (s.find ("\n") != std::string::npos) {
@ -372,7 +387,7 @@ MAGWriter::write_single_instance (db::cell_index_type ci, db::ICplxTrans trans,
db::Vector d = scaled (trans.disp ());
os << "transform " << m.m11 () << " " << m.m12 () << " " << d.x () << " " << m.m21 () << " " << m.m22 () << " " << d.y () << "\n";
db::Box bx = scaled (layout.cell (ci).bbox ());
db::Box bx = scaled (safe_box (layout.cell (ci).bbox ()));
os << "box " << bx.left () << " " << bx.bottom () << " " << bx.right () << " " << bx.top () << "\n";
}
@ -410,7 +425,7 @@ MAGWriter::scaled (const db::Vector &v) const
{
db::Vector res (db::DVector (v) * m_sf);
if (! db::DVector (res).equal (db::DVector (v) * m_sf)) {
tl::warn << tl::sprintf (tl::to_string (tr ("Vector rounding occurred at %s in cell %s - not a multiple of lambda (%.12g)")), v.to_string (), m_cellname, m_options.lambda);
tl::warn << tl::sprintf (tl::to_string (tr ("Vector rounding occurred at %s in cell %s - not a multiple of lambda (%.12g)")), (db::DVector (v) * m_sf).to_string (), m_cellname, m_options.lambda);
}
return res;
}
@ -420,7 +435,7 @@ MAGWriter::scaled (const db::Point &p) const
{
db::Point res (db::DPoint (p) * m_sf);
if (! db::DPoint (res).equal (db::DPoint (p) * m_sf)) {
tl::warn << tl::sprintf (tl::to_string (tr ("Coordinate rounding occurred at %s in cell %s - not a multiple of lambda (%.12g)")), p.to_string (), m_cellname, m_options.lambda);
tl::warn << tl::sprintf (tl::to_string (tr ("Coordinate rounding occurred at %s in cell %s - not a multiple of lambda (%.12g)")), (db::DPoint (p) * m_sf).to_string (), m_cellname, m_options.lambda);
}
return res;
}

View File

@ -26,17 +26,24 @@
#include "dbWriter.h"
#include "dbMAGWriter.h"
#include "tlUnitTest.h"
#include "tlEnv.h"
#include "tlFileUtils.h"
#include <stdlib.h>
static void run_test (tl::TestBase *_this, const std::string &base, const char *file, const char *file_au, const char *map = 0, double lambda = 0.1, double dbu = 0.001, const std::vector<std::string> *lib_paths = 0)
static void run_test (tl::TestBase *_this, const std::string &base, const char *file, const char *file_au, const char *map = 0, double lambda = 0.1, double write_lambda = 0.0, double dbu = 0.001, const std::vector<std::string> *lib_paths = 0)
{
db::MAGReaderOptions *opt = new db::MAGReaderOptions();
opt->dbu = dbu;
opt->lambda = lambda;
if (lib_paths) {
opt->lib_paths = *lib_paths;
}
if (write_lambda == 0) {
write_lambda = lambda;
}
db::LayerMap lm;
if (map) {
unsigned int ln = 0;
@ -71,7 +78,7 @@ static void run_test (tl::TestBase *_this, const std::string &base, const char *
std::string tc_name = layout.cell_name (*layout.begin_top_down ());
// normalize the layout by writing to GDS and reading from ..
// normalize the layout by writing to CIF and reading from ..
std::string tmp_cif_file = _this->tmp_file (tl::sprintf ("%s.cif", tc_name));
std::string tmp_mag_file = _this->tmp_file (tl::sprintf ("%s.mag", tc_name));
@ -96,7 +103,7 @@ static void run_test (tl::TestBase *_this, const std::string &base, const char *
tl::OutputStream stream (tmp_mag_file);
db::MAGWriterOptions *opt = new db::MAGWriterOptions();
opt->lambda = lambda;
opt->lambda = write_lambda;
db::MAGWriter writer;
db::SaveLayoutOptions options;
@ -109,7 +116,7 @@ static void run_test (tl::TestBase *_this, const std::string &base, const char *
db::MAGReaderOptions *opt = new db::MAGReaderOptions();
opt->dbu = dbu;
opt->lambda = lambda;
opt->lambda = write_lambda;
db::LoadLayoutOptions reread_options;
reread_options.set_options (opt);
@ -141,23 +148,29 @@ static void run_test (tl::TestBase *_this, const std::string &base, const char *
TEST(1)
{
run_test (_this, tl::testdata (), "MAG_TEST.mag.gz", "mag_test_au.cif.gz");
run_test (_this, tl::testdata (), "MAG_TEST.mag.gz", "mag_test_au.cif.gz", 0, 1.0, 0.1);
}
TEST(2)
{
std::vector<std::string> lp;
lp.push_back (std::string ("../.."));
run_test (_this, tl::testdata (), "PearlRiver/Layout/magic/PearlRiver_die.mag", "PearlRiver_au.cif.gz", 0, 1.0, 0.001, &lp);
run_test (_this, tl::testdata (), "PearlRiver/Layout/magic/PearlRiver_die.mag", "PearlRiver_au.cif.gz", 0, 1.0, 0.0, 0.001, &lp);
}
TEST(3)
{
run_test (_this, tl::testdata (), "ringo/RINGO.mag", "ringo_au.cif.gz");
run_test (_this, tl::testdata (), "ringo/RINGO.mag", "ringo_au.cif.gz", 0, 1.0, 0.1);
}
TEST(4)
{
run_test (_this, tl::testdata (), "issue_1925/redux.mag", "redux_au.cif.gz");
run_test (_this, tl::testdata (), "issue_1925/redux.mag", "redux_au.cif.gz", 0, 1.0, 0.1);
}
TEST(5)
{
tl::set_env ("__TESTSRC_ABSPATH", tl::absolute_file_path (tl::testsrc ()));
run_test (_this, tl::testdata (), "gf180mcu_ocd_sram_test/gf180mcu_ocd_sram_top.mag.gz", "gf180mcu_ocd_sram_test.cif.gz", 0, 0.05, 0.005);
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,6 @@
magic
tech gf180mcuD
timestamp 1654634570
<< properties >>
string FIXED_BBOX 0 -43 86 151
<< end >>

View File

@ -0,0 +1,10 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 324 216 756
rect 0 0 216 216
<< properties >>
string FIXED_BBOX 0 -216 324 756
<< end >>

View File

@ -0,0 +1,10 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 324 108 756
rect 216 324 324 756
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,16 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 108 540 216 756
rect 324 540 432 756
rect 0 432 540 540
rect 108 324 216 432
rect 324 324 432 432
rect 0 216 540 324
rect 108 0 216 216
rect 324 0 432 216
<< properties >>
string FIXED_BBOX 0 -216 648 756
<< end >>

View File

@ -0,0 +1,21 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 108 648 216 756
rect 72 612 324 648
rect 36 576 324 612
rect 0 540 324 576
rect 0 432 144 540
rect 0 396 252 432
rect 36 360 288 396
rect 72 324 324 360
rect 180 216 324 324
rect 0 180 324 216
rect 0 144 288 180
rect 0 108 252 144
rect 108 0 216 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,25 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 540 216 756
rect 432 612 540 756
rect 396 576 540 612
rect 360 540 540 576
rect 324 504 504 540
rect 324 468 468 504
rect 288 432 432 468
rect 180 396 432 432
rect 144 360 396 396
rect 108 324 360 360
rect 108 288 252 324
rect 72 252 216 288
rect 36 216 216 252
rect 0 180 180 216
rect 0 144 144 180
rect 0 0 108 144
rect 324 0 540 216
<< properties >>
string FIXED_BBOX 0 -216 648 756
<< end >>

View File

@ -0,0 +1,32 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 144 720 396 756
rect 108 684 432 720
rect 72 612 468 684
rect 72 576 180 612
rect 36 504 180 576
rect 360 504 468 612
rect 36 468 216 504
rect 72 432 252 468
rect 72 396 288 432
rect 72 360 324 396
rect 36 324 360 360
rect 0 288 396 324
rect 0 252 144 288
rect 252 252 432 288
rect 0 144 108 252
rect 288 216 468 252
rect 288 180 504 216
rect 288 144 540 180
rect 0 108 144 144
rect 252 108 540 144
rect 0 72 540 108
rect 36 36 540 72
rect 72 0 324 36
rect 432 0 540 36
<< properties >>
string FIXED_BBOX 0 -216 648 756
<< end >>

View File

@ -0,0 +1,10 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 540 216 756
rect 108 432 216 540
<< properties >>
string FIXED_BBOX 0 -216 324 756
<< end >>

View File

@ -0,0 +1,15 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 720 216 756
rect 36 684 216 720
rect 0 612 216 684
rect 0 144 108 612
rect 0 72 216 144
rect 36 36 216 72
rect 72 0 216 36
<< properties >>
string FIXED_BBOX 0 -216 324 756
<< end >>

View File

@ -0,0 +1,15 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 720 144 756
rect 0 684 180 720
rect 0 612 216 684
rect 108 144 216 612
rect 0 72 216 144
rect 0 36 180 72
rect 0 0 144 36
<< properties >>
string FIXED_BBOX 0 -216 324 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 216 648 324 756
rect 144 576 396 648
rect 36 468 504 576
rect 144 396 396 468
rect 216 288 324 396
<< properties >>
string FIXED_BBOX 0 -216 648 756
<< end >>

View File

@ -0,0 +1,11 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 108 432 216 540
rect 0 324 324 432
rect 108 216 216 324
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,10 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 0 216 216
rect 108 -108 216 0
<< properties >>
string FIXED_BBOX 0 -216 324 756
<< end >>

View File

@ -0,0 +1,9 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 324 432 432
<< properties >>
string FIXED_BBOX 0 -216 540 756
<< end >>

View File

@ -0,0 +1,9 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 0 216 216
<< properties >>
string FIXED_BBOX 0 -216 324 756
<< end >>

View File

@ -0,0 +1,21 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 216 648 324 756
rect 180 540 324 648
rect 144 504 324 540
rect 144 468 288 504
rect 108 432 288 468
rect 108 396 252 432
rect 72 360 252 396
rect 72 324 216 360
rect 36 288 216 324
rect 36 252 180 288
rect 0 216 180 252
rect 0 108 144 216
rect 0 0 108 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,12 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 0 108 108 648
rect 216 108 324 648
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,12 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 108 648 216 756
rect 0 540 216 648
rect 108 108 216 540
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 216 540 324 648
rect 0 432 324 540
rect 0 108 108 432
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 216 540 324 648
rect 0 432 324 540
rect 216 108 324 432
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,12 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 540 108 648
rect 216 540 324 756
rect 0 432 324 540
rect 216 0 324 432
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 0 540 108 648
rect 0 432 324 540
rect 216 108 324 432
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,14 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 0 540 108 648
rect 0 432 324 540
rect 0 108 108 432
rect 216 108 324 432
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,10 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 216 0 324 648
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,15 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 0 540 108 648
rect 216 540 324 648
rect 0 432 324 540
rect 0 108 108 432
rect 216 108 324 432
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 0 540 108 648
rect 216 540 324 648
rect 0 432 324 540
rect 216 0 324 432
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,10 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 324 216 540
rect 0 0 216 216
<< properties >>
string FIXED_BBOX 0 -216 324 756
<< end >>

View File

@ -0,0 +1,11 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 324 216 540
rect 0 0 216 216
rect 108 -108 216 0
<< properties >>
string FIXED_BBOX 0 -216 324 756
<< end >>

View File

@ -0,0 +1,21 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 216 612 324 648
rect 180 576 324 612
rect 144 540 324 576
rect 108 504 288 540
rect 72 468 252 504
rect 36 432 216 468
rect 0 324 180 432
rect 36 288 216 324
rect 72 252 252 288
rect 108 216 288 252
rect 144 180 324 216
rect 180 144 324 180
rect 216 108 324 144
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,10 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 432 432 540
rect 0 216 432 324
<< properties >>
string FIXED_BBOX 0 -216 540 756
<< end >>

View File

@ -0,0 +1,21 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 612 108 648
rect 0 576 144 612
rect 0 540 180 576
rect 36 504 216 540
rect 72 468 252 504
rect 108 432 288 468
rect 144 324 324 432
rect 108 288 288 324
rect 72 252 252 288
rect 36 216 216 252
rect 0 180 180 216
rect 0 144 144 180
rect 0 108 108 144
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,18 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 720 252 756
rect 36 684 288 720
rect 0 612 324 684
rect 0 540 108 612
rect 216 468 324 612
rect 180 432 324 468
rect 108 396 324 432
rect 72 360 288 396
rect 72 288 252 360
rect 36 0 288 180
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,33 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 144 720 648 756
rect 108 684 684 720
rect 72 648 720 684
rect 36 612 216 648
rect 576 612 756 648
rect 0 576 180 612
rect 612 576 756 612
rect 0 540 144 576
rect 0 0 108 540
rect 288 504 468 540
rect 252 468 504 504
rect 216 396 540 468
rect 216 144 324 396
rect 432 144 540 396
rect 648 144 756 576
rect 216 72 756 144
rect 252 36 720 72
rect 288 0 432 36
rect 540 0 684 36
rect 0 -36 144 0
rect 0 -72 180 -36
rect 36 -108 216 -72
rect 72 -144 648 -108
rect 108 -180 648 -144
rect 144 -216 648 -180
<< properties >>
string FIXED_BBOX 0 -216 864 756
<< end >>

View File

@ -0,0 +1,16 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 720 252 756
rect 36 684 288 720
rect 0 612 324 684
rect 0 324 108 612
rect 216 324 324 612
rect 0 216 324 324
rect 0 0 108 216
rect 216 0 324 216
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,19 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 720 252 756
rect 0 684 288 720
rect 0 612 324 684
rect 0 432 108 612
rect 216 432 324 612
rect 0 324 324 432
rect 0 144 108 324
rect 216 144 324 324
rect 0 72 324 144
rect 0 36 288 72
rect 0 0 252 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,15 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 720 324 756
rect 36 684 324 720
rect 0 612 324 684
rect 0 144 108 612
rect 0 72 324 144
rect 36 36 324 72
rect 72 0 324 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,16 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 720 252 756
rect 0 684 288 720
rect 0 612 324 684
rect 0 144 108 612
rect 216 144 324 612
rect 0 72 324 144
rect 0 36 288 72
rect 0 0 252 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 0 432 108 648
rect 0 324 216 432
rect 0 108 108 324
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,12 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 0 432 108 648
rect 0 324 216 432
rect 0 0 108 324
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,17 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 720 252 756
rect 36 684 288 720
rect 0 612 324 684
rect 0 144 108 612
rect 216 540 324 612
rect 216 144 324 432
rect 0 72 324 144
rect 36 36 324 72
rect 72 0 324 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 432 108 756
rect 216 432 324 756
rect 0 324 324 432
rect 0 0 108 324
rect 216 0 324 324
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,11 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 108 108 216 648
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 144 108 216
rect 216 144 324 756
rect 0 72 324 144
rect 36 36 288 72
rect 72 0 252 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,17 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 576 108 756
rect 216 576 324 756
rect 0 504 324 576
rect 0 432 288 504
rect 0 324 252 432
rect 0 252 288 324
rect 0 180 324 252
rect 0 0 108 180
rect 216 0 324 180
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,10 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 108 108 756
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,16 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 108 756
rect 432 648 540 756
rect 0 540 216 648
rect 324 540 540 648
rect 0 432 540 540
rect 0 0 108 432
rect 216 324 324 432
rect 432 0 540 432
<< properties >>
string FIXED_BBOX 0 -216 648 756
<< end >>

View File

@ -0,0 +1,15 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 108 756
rect 0 540 216 648
rect 324 540 432 756
rect 0 432 432 540
rect 0 0 108 432
rect 216 324 432 432
rect 324 0 432 324
<< properties >>
string FIXED_BBOX 0 -216 540 756
<< end >>

View File

@ -0,0 +1,16 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 720 252 756
rect 36 684 288 720
rect 0 612 324 684
rect 0 144 108 612
rect 216 144 324 612
rect 0 72 324 144
rect 36 36 288 72
rect 72 0 252 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,17 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 720 252 756
rect 0 684 288 720
rect 0 612 324 684
rect 0 360 108 612
rect 216 360 324 612
rect 0 288 324 360
rect 0 252 288 288
rect 0 216 252 252
rect 0 0 108 216
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,16 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 720 252 756
rect 36 684 288 720
rect 0 612 324 684
rect 0 252 108 612
rect 216 252 324 612
rect 0 72 324 252
rect 36 36 324 72
rect 72 0 324 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,22 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 720 252 756
rect 0 684 288 720
rect 0 612 324 684
rect 0 504 108 612
rect 216 504 324 612
rect 0 432 324 504
rect 0 396 288 432
rect 0 360 252 396
rect 0 252 216 360
rect 0 216 252 252
rect 0 180 288 216
rect 0 108 324 180
rect 0 0 108 108
rect 216 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,20 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 720 324 756
rect 36 684 324 720
rect 0 612 324 684
rect 0 468 108 612
rect 0 432 252 468
rect 0 396 288 432
rect 36 360 324 396
rect 72 324 324 360
rect 216 144 324 324
rect 0 72 324 144
rect 0 36 288 72
rect 0 0 252 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,10 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 108 0 216 648
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 144 108 756
rect 216 144 324 756
rect 0 72 324 144
rect 36 36 288 72
rect 72 0 252 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,14 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 396 108 756
rect 216 396 324 756
rect 0 324 324 396
rect 36 216 288 324
rect 72 108 252 216
rect 108 0 216 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,16 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 396 108 756
rect 216 396 324 756
rect 432 396 540 756
rect 0 324 540 396
rect 36 216 504 324
rect 72 108 468 216
rect 108 0 216 108
rect 324 0 432 108
<< properties >>
string FIXED_BBOX 0 -216 648 756
<< end >>

View File

@ -0,0 +1,17 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 576 108 756
rect 216 576 324 756
rect 0 504 324 576
rect 36 432 288 504
rect 72 324 252 432
rect 36 252 288 324
rect 0 180 324 252
rect 0 0 108 180
rect 216 0 324 180
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,14 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 504 108 756
rect 216 504 324 756
rect 0 432 324 504
rect 36 360 288 432
rect 72 288 252 360
rect 108 0 216 288
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,19 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 216 504 324 648
rect 180 468 324 504
rect 144 432 324 468
rect 108 396 288 432
rect 72 360 252 396
rect 36 324 216 360
rect 0 288 180 324
rect 0 252 144 288
rect 0 108 108 252
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,11 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 0 108 108 648
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,21 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 108 756
rect 0 540 144 648
rect 0 504 180 540
rect 36 468 180 504
rect 36 432 216 468
rect 72 396 216 432
rect 72 360 252 396
rect 108 324 252 360
rect 108 288 288 324
rect 144 252 288 288
rect 144 216 324 252
rect 180 108 324 216
rect 216 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,11 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 648 324 756
rect 216 108 324 648
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,10 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 108 648 216 756
rect 0 540 324 648
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,9 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 0 432 108
<< properties >>
string FIXED_BBOX 0 -216 540 756
<< end >>

View File

@ -0,0 +1,10 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 540 216 756
rect 0 432 108 540
<< properties >>
string FIXED_BBOX 0 -216 324 756
<< end >>

View File

@ -0,0 +1,17 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 504 288 540
rect 0 432 324 504
rect 216 324 324 432
rect 36 288 324 324
rect 0 216 324 288
rect 0 108 108 216
rect 216 108 324 216
rect 0 36 324 108
rect 36 0 324 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,17 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 540 108 756
rect 0 504 252 540
rect 0 468 288 504
rect 0 396 324 468
rect 0 144 108 396
rect 216 144 324 396
rect 0 72 324 144
rect 0 36 288 72
rect 0 0 252 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,17 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 504 252 540
rect 36 468 288 504
rect 0 396 324 468
rect 0 144 108 396
rect 216 324 324 396
rect 216 144 324 180
rect 0 72 324 144
rect 36 36 288 72
rect 72 0 252 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,17 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 216 540 324 756
rect 72 504 324 540
rect 36 468 324 504
rect 0 396 324 468
rect 0 144 108 396
rect 216 144 324 396
rect 0 72 324 144
rect 36 36 324 72
rect 72 0 324 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,17 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 36 504 288 540
rect 0 432 324 504
rect 0 324 108 432
rect 216 324 324 432
rect 0 252 324 324
rect 0 216 288 252
rect 0 108 108 216
rect 0 36 324 108
rect 36 0 324 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 144 720 324 756
rect 108 648 324 720
rect 108 540 216 648
rect 0 432 324 540
rect 108 0 216 432
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,20 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 504 252 540
rect 36 468 288 504
rect 0 396 324 468
rect 0 144 108 396
rect 216 144 324 396
rect 0 72 324 144
rect 36 36 324 72
rect 72 0 324 36
rect 180 -108 324 0
rect 0 -144 324 -108
rect 0 -180 288 -144
rect 0 -216 252 -180
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,14 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 540 108 756
rect 0 504 252 540
rect 0 468 288 504
rect 0 396 324 468
rect 0 0 108 396
rect 216 0 324 396
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,12 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 540 216 756
rect 0 324 216 432
rect 108 108 216 324
rect 0 0 216 108
<< properties >>
string FIXED_BBOX 0 -216 324 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 540 216 756
rect 0 324 216 432
rect 108 -108 216 324
rect 0 -180 216 -108
rect 0 -216 180 -180
<< properties >>
string FIXED_BBOX 0 -216 324 756
<< end >>

View File

@ -0,0 +1,17 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 432 108 756
rect 216 432 324 540
rect 0 360 324 432
rect 0 324 288 360
rect 0 216 216 324
rect 0 180 288 216
rect 0 108 324 180
rect 0 0 108 108
rect 216 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,9 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 0 108 756
<< properties >>
string FIXED_BBOX 0 -216 216 756
<< end >>

View File

@ -0,0 +1,15 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 504 216 540
rect 324 504 468 540
rect 0 468 504 504
rect 0 396 540 468
rect 0 0 108 396
rect 216 0 324 396
rect 432 0 540 396
<< properties >>
string FIXED_BBOX 0 -216 648 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 504 252 540
rect 0 468 288 504
rect 0 396 324 468
rect 0 0 108 396
rect 216 0 324 396
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,16 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 504 252 540
rect 36 468 288 504
rect 0 396 324 468
rect 0 144 108 396
rect 216 144 324 396
rect 0 72 324 144
rect 36 36 288 72
rect 72 0 252 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,17 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 504 252 540
rect 36 468 288 504
rect 0 396 324 468
rect 0 144 108 396
rect 216 144 324 396
rect 0 72 324 144
rect 0 36 288 72
rect 0 0 252 36
rect 0 -216 108 0
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,17 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 504 252 540
rect 36 468 288 504
rect 0 396 324 468
rect 0 144 108 396
rect 216 144 324 396
rect 0 72 324 144
rect 36 36 324 72
rect 72 0 324 36
rect 216 -216 324 0
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 504 252 540
rect 0 468 288 504
rect 0 396 324 468
rect 0 0 108 396
rect 216 324 324 396
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,19 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 72 504 324 540
rect 36 468 324 504
rect 0 432 324 468
rect 0 324 144 432
rect 0 288 252 324
rect 36 252 288 288
rect 72 216 324 252
rect 180 108 324 216
rect 0 72 324 108
rect 0 36 288 72
rect 0 0 252 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,11 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 108 540 216 648
rect 0 432 324 540
rect 108 0 216 432
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 144 108 540
rect 216 144 324 540
rect 0 72 324 144
rect 36 36 324 72
rect 72 0 324 36
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,13 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 216 108 540
rect 216 216 324 540
rect 0 108 324 216
rect 36 72 288 108
rect 108 0 216 72
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,15 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 144 108 540
rect 216 144 324 540
rect 432 144 540 540
rect 0 72 540 144
rect 36 36 540 72
rect 72 0 216 36
rect 324 0 540 36
<< properties >>
string FIXED_BBOX 0 -216 648 756
<< end >>

View File

@ -0,0 +1,15 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 396 108 540
rect 216 396 324 540
rect 0 324 324 396
rect 36 216 288 324
rect 0 144 324 216
rect 0 0 108 144
rect 216 0 324 144
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,17 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 144 108 540
rect 216 144 324 540
rect 0 72 324 144
rect 36 36 324 72
rect 72 0 324 36
rect 180 -108 324 0
rect 0 -144 324 -108
rect 0 -180 288 -144
rect 0 -216 252 -180
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

View File

@ -0,0 +1,15 @@
magic
tech gf180mcuD
magscale 1 5
timestamp 1654634570
<< metal5 >>
rect 0 432 324 540
rect 144 324 324 432
rect 108 288 288 324
rect 72 252 252 288
rect 36 216 216 252
rect 0 108 180 216
rect 0 0 324 108
<< properties >>
string FIXED_BBOX 0 -216 432 756
<< end >>

Some files were not shown because too many files have changed in this diff Show More